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

Kotlin如何遍历Student类嵌套Course属性获取最高课程成绩

解决方案

首先提下你原有代码的小问题:你的Student类构造参数已经声明了var name: String,类内部又重复定义了同名的name属性,会覆盖构造传入的数值,建议调整删除重复定义。

方案1:手动枚举Course属性(推荐)

这种方式无额外依赖、性能最高,适合课程属性固定的场景,代码如下:

val highestScore = listOf(
    studentData.Math,
    studentData.English,
    studentData.Spanish
)
    .filterNotNull() // 过滤未选课的空属性
    .mapNotNull { it.courseGrade } // 过滤未录入成绩的课程
    .maxOrNull() // 无有效成绩时返回null,可加 ?: 0 设置默认值

方案2:反射遍历属性(适合属性频繁新增的场景)

如果后续会频繁新增不同课程的Course类型属性,可以用Kotlin反射自动筛选,首先需要在项目依赖中引入Kotlin反射库:
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
之后实现代码如下:

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.returnType

val highestScore = Student::class.memberProperties
    // 筛选所有返回值为Course类型的属性
    .filter { it.returnType.classifier == Course::class }
    // 从实例中取出属性值并转型
    .map { it.get(studentData) as? Course }
    .filterNotNull()
    .mapNotNull { it.courseGrade }
    .maxOrNull()

注意:如果Course存在子类,需要把筛选逻辑调整为兼容子类的判断逻辑,避免子类属性被过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:15:01