代码之家  ›  专栏  ›  技术社区  ›  HelloCW

为什么我不能在Android Studio中的kotlin中的enum基类中启动函数?

  •  1
  • HelloCW  · 技术社区  · 4 年前

    在代码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
    
    1 回复  |  直到 4 年前
        1
  •  3
  •   Tenfour04    4 年前

    就像任何其他类一样,如果你想这样调用它,而不是在类的实例上调用它,你必须把这个函数放在一个伴随对象中。

    enum class ELevel(val label:String){
        Whisper("Whisper"),
        Quiet("Quiet Library");
    
        companion object {
            fun getLevel(soundValue:Double):ELevel{
               //...
            }
        }
    
    }