在代码A中,ELevel是枚举类,枚举中的fun getLevel将通过参数soundValue返回一个子类。
代码A可以编译。
我认为B代码更好,但实际上它不能编译,为什么?
码A
data class MSoundDensity(
val avg: Double=0.0,
val max: Double=0.0,
val level: ELevel=ELevel.Whisper.getLevel(avg)
)
enum class ELevel(val label:String){
Whisper("Whisper"),
Quiet("Quiet Library");
fun getLevel(soundValue:Double):ELevel{
var temp=Whisper
val i=soundValue.toInt()
if (i in 1..20){
temp=Whisper
}
if (i in 21..40){
temp=Quiet
}
return temp
}
}码B
data class MSoundDensity(
val avg: Double=0.0,
val max: Double=0.0,
val level: ELevel=ELevel.getLevel(avg) //It cause error when I use base class.
)
//The same发布于 2022-03-12 14:14:37
就像任何其他类一样,如果您想这样调用它,而不是在类的实例上调用它,就必须将该函数放在一个伴生对象中。
enum class ELevel(val label:String){
Whisper("Whisper"),
Quiet("Quiet Library");
companion object {
fun getLevel(soundValue:Double):ELevel{
//...
}
}
}https://stackoverflow.com/questions/71450296
复制相似问题