无法在 kotlin 中创建抽象类 Random 的实例



In get Number 方法。 当我使用 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")
val  random = Random()
myRandomNumber = " Number "+ (random.nextInt(10-1)+1)
}
companion object{
private val  Tag : String = MainActivityDataGenerator::class.java.simpleName
}

}

我想这是导入语句的差异。

如果你想使用 Kotlin Random 类,那么像这样使用。 与下面的导入。

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

如果你想使用你似乎使用的Java,那么像这样使用它。

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

只需删除 Kotlin 或在构造函数中添加种子值即可工作。

您需要向随机类提供一个种子编号才能创建对象。在这里,我修改了您的代码,并用注释解释了代码中的所有内容。

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
}
}

最新更新