You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin简单数据类使用方法及自定义Country数据类报错求助

Hey there! Let's work through your Kotlin data class issue step by step—first, I'll point out the common pitfalls in your current code, then share the correct implementation and how to troubleshoot those errors.

First: Fix the Basic Syntax Error

The biggest issue in your code is the brace placement for the data class constructor. In Kotlin, data class primary constructor parameters go inside parentheses () right after the class name, not curly braces {}. Curly braces are for the class body (like extra functions or properties), not the primary constructor.

Second: Ensure You Have the Right Dependencies

The @SerializedName annotation comes from Gson (Google's JSON parsing library), so you need to add Gson to your project first. If you're using Gradle (either Groovy or Kotlin DSL), add this to your module-level build.gradle/build.gradle.kts:

For Groovy:

implementation "com.google.code.gson:gson:2.10.1" // Use the latest version available

For Kotlin DSL:

implementation("com.google.code.gson:gson:2.10.1")

If you're using Retrofit with Gson for API calls, you'll also need the converter dependency:

// Groovy
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
// Kotlin DSL
implementation("com.squareup.retrofit2:converter-gson:2.9.0")

Correct Data Class Implementation

Here's the fixed, properly formatted version of your Country data class:

import com.google.gson.annotations.SerializedName

data class Country(
    @SerializedName("name") val countryName: String?,
    @SerializedName("capital") val capital: String?,
    @SerializedName("flagPNG") val flag: String?
)

Common Error Troubleshooting

Let's cover the most likely errors you might be seeing:

  • "Unresolved reference: SerializedName": This means you don't have the Gson dependency added, or you forgot to import the annotation. Double-check your build file and add the import line above.
  • Syntax errors related to braces: As I mentioned earlier, primary constructor parameters belong in parentheses, not curly braces. Fixing that will resolve most syntax red flags.
  • Null safety issues: Using ? for nullable fields is correct if the JSON might omit those values. If you're sure a field will always be present in the JSON, you can remove the ? to make it non-nullable (just be aware this will throw an error if the field is missing during parsing).

Example Usage: Parsing JSON with Gson

To test your data class, here's a quick example of parsing a JSON string into a Country object:

import com.google.gson.Gson

fun main() {
    // Sample JSON matching your field names
    val countryJson = """
        {
            "name": "Japan",
            "capital": "Tokyo",
            "flagPNG": "https://example.com/jp-flag.png"
        }
    """.trimIndent()

    // Parse the JSON into a Country object
    val country = Gson().fromJson(countryJson, Country::class.java)

    // Access the properties
    println("Country: ${country.countryName}")
    println("Capital: ${country.capital}")
    println("Flag URL: ${country.flag}")
}

One great thing about Kotlin data classes is they automatically generate useful methods like toString(), equals(), and hashCode()—so you don't have to write those manually!

内容的提问来源于stack exchange,提问作者Devrath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:11:01