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