【问题标题】:Cannot create an instance of an abstract class Random in kotlin无法在 kotlin 中创建抽象类 Random 的实例
【发布时间】:2020-04-06 10:42:58
【问题描述】:

在 get Number 方法中。当我使用 Random() 方法时,android studio 给我错误消息无法创建抽象类的实例,请告诉我如何解决此错误。

class MainActivityDataGenerator : ViewModel() {
    private lateinit var myRandomNumber : String

    fun getNumber(): String{
        Log.i(Tag, "Get Number")
        if (!::myRandomNumber.isInitialized){
            this.createNumber()
        }
        return myRandomNumber
    }

    fun createNumber(){
        Log.i(Tag, "create new Number")
        val  random = Random()

        myRandomNumber = " Number "+ (random.nextInt(10-1)+1)

    }

    companion object{
       private val  Tag : String = MainActivityDataGenerator::class.java.simpleName
    }


}

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    我猜是import语句的不同。

    如果您想使用 Kotlin Random 类,请像这样使用。具有以下导入。

    import kotlin.random.Random
    //.....
    
       val random = Random(12)
    

    如果你想使用你似乎喜欢的 Java,然后像这样使用它。

    import java.util.*
    //.....
    
        val random = Random()
    

    只需删除 kotlin 之一或在构造函数中添加种子值即可。

    【讨论】:

    • 实际上不要使用Random(12),除非您希望在每次运行程序时获得相同的随机值。
    【解决方案2】:

    您需要向 Random 类提供种子编号来创建对象。在这里我修改了你的代码,并用 cmets 解释了代码中的所有内容。

    import android.util.Log
    import androidx.lifecycle.ViewModel
    import kotlin.random.Random
    
    class MainActivityDataGenerator : ViewModel() {
        private lateinit var myRandomNumber : String
    
        fun getNumber(): String{
            Log.i(Tag, "Get Number")
            if (!::myRandomNumber.isInitialized){
                this.createNumber()
            }
            return myRandomNumber
        }
    
        fun createNumber(){
            Log.i(Tag, "create new Number")
    
            /* Initialize it with a seed number. Seed is used to generate a random
            number sequence. Two different Object of Random class with same seed number will
            generate same sequences of random number. If you want different sequences
            use different seed numbers to different objects*/
    
            val  random = Random(10)
    
            myRandomNumber = " Number "+ (random.nextInt(10-1)+1)
    
        }
    
        companion object{
            private val  Tag : String = MainActivityDataGenerator::class.java.simpleName
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多