Java 如何使用Kotlin迭代类组件

Java 如何使用Kotlin迭代类组件,java,android,kotlin,Java,Android,Kotlin,我面临这个问题,我已经做了一些搜索,但我没有找到答案 我想做什么 我使用改型从API获取一些数据,我可以获取数据,但我想在类中进行ForEach以找到我需要的属性 data class ChampionList( @SerializedName("version") val version : String, @SerializedName("data") val data : Data) <------ wa

我面临这个问题,我已经做了一些搜索,但我没有找到答案

我想做什么

我使用改型从API获取一些数据,我可以获取数据,但我想在类中进行ForEach以找到我需要的属性

    data class ChampionList(
            @SerializedName("version")
        val version : String,
        @SerializedName("data")
        val data : Data) <------ wanna do the foreach in this property  
当我搜索时,我发现了一些关于Kotlin reflection的信息,但我不明白:(

我发现的另一件事,但它不起作用,就是使用这个:

 for(data in ChampionList::class.memberProperties){
   //access data here, but got an unresolved reference for member properties
}

classes:


    data class ChampionList(
        @SerializedName("version")
        val version : String,
        @SerializedName("data")
        val data : Data)



    data class Data (
        @SerializedName("Aatrox") val aatrox : Aatrox,
        @SerializedName("Ahri") val ahri : Ahri,
        @SerializedName("Akali") val akali : Akali,
        @SerializedName("Alistar") val alistar : Alistar,
        @SerializedName("Amumu") val amumu : Amumu,
        @SerializedName("Anivia") val anivia : Anivia
    }


    data class Aatrox(

        @SerializedName("version") val version: String,
        @SerializedName("id") val id: String,
        @SerializedName("key") val key: Int,
        @SerializedName("name") val name: String,
        @SerializedName("title") val title: String,
        @SerializedName("blurb") val blurb: String,
        @SerializedName("info") val info: Info,
        @SerializedName("image") val image: Image,
        @SerializedName("tags") val tags: List<String>,
        @SerializedName("partype") val partype: String,
        @SerializedName("stats") val stats: Stats
    )
for(ChampionList::class.memberProperties中的数据){
//在此处访问数据,但获取了成员属性的未解析引用
}
课程:
数据类ChampionList(
@SerializedName(“版本”)
val版本:String,
@SerializedName(“数据”)
val数据:数据)
数据类数据(
@SerializedName(“Aatrox”)val Aatrox:Aatrox,
@序列化名称(“Ahri”)val Ahri:Ahri,
@序列化名称(“Akali”)val Akali:Akali,
@SerializedName(“Alistar”)val Alistar:Alistar,
@序列化名称(“Amumu”)val Amumu:Amumu,
@序列化名称(“Anivia”)val Anivia:Anivia
}
数据类Aatrox(
@SerializedName(“版本”)val版本:字符串,
@SerializedName(“id”)val id:字符串,
@SerializedName(“key”)val key:Int,
@SerializedName(“名称”)val名称:字符串,
@SerializedName(“title”)val title:String,
@SerializedName(“blurb”)val blurb:String,
@SerializedName(“info”)val info:info,
@SerializedName(“图像”)val图像:图像,
@SerializedName(“标记”)val标记:列表,
@SerializedName(“partype”)val partype:String,
@SerializedName(“stats”)val stats:stats
)

所有其他类,如Ahri、Akali、Alistar、Amumu和Anivia,都与Aatrox相同

尝试以下内容:

for (dataChampion in data.orEmpty()) { 
    //do something
 }
或者这个:

 data?.let {
    for (dataChampion in it) {

    }
}
我的猜测是,您正在尝试遍历可为空的数据类型,希望这对您有效。祝您在传奇联盟应用程序中好运:)

是正确的方法(如果您没有在类中声明任何属性并且不关心顺序),但是您需要

  • 如果尚未添加
    kotlin reflect
    依赖项,请按所述添加该依赖项(针对Gradle):

    implementation "org.jetbrains.kotlin:kotlin-reflect"
    
  • 添加
    导入kotlin.reflect.full.memberProperties

  • 如果您确实关心顺序或不在类中包含属性,请改用
    ChampionList::class.primaryConstructor.valueParameters


  • 嘿,我尝试了你的解决方案,但没有成功:(当我做第二个解决方案时,我得到了以下错误:For循环范围必须有一个‘iterator()’方法现在我意识到你想做什么,因为数据不是一个真正的列表,你能澄清你为什么需要这样做吗?你想实现什么?我想在类数据中做foreach(有另一个类作为参数(想要在这个参数中获取数据))sup-man,我正在尝试解决方案,但是,现在我只能获取参数的名称,而不能获取我试图做的数据(我需要的):for(ChampionsList::class.memberProperties.iterator()中的数据){Log.d(“abacaxi”,data.get(t.toString())我不明白你在问什么。调用
    data
    上的方法,例如
    data.get(t)
    就是如何使用它的。
    for(data in ChampionList::class.memberProperties){
        //access data here, but got an unresolved reference for member properties
    }
    
    implementation "org.jetbrains.kotlin:kotlin-reflect"