相关疑难解决方法(0)

在kotlin中创建泛型类的新实例的正确方法是什么?

我使用以下初始化:

val entityClass = javaClass<Class<T>>()
var entity = entityClass.newInstance().newInstance()
Run Code Online (Sandbox Code Playgroud)

但它是错的,并导致IllegalAccessExceptionjava.lang.Class.newInstance(Class.java:1208)

generics class kotlin

17
推荐指数
2
解决办法
7924
查看次数

在Kotlin中实例化通用数组

为什么这不编译?我在3行中得到编译错误

不能使用T作为reified类型参数.请改用类

class Matrix2d<T>(val rows: Int, val cols: Int, init: (Int, Int) -> T) {

   var data = Array(rows * cols, { i ->
      val r = Math.floor(i.toDouble() / cols).toInt()
      init(r, i - r * cols)
   })

   operator fun get(row: Int, col: Int): T = data[row * cols + col]

   operator fun set(row: Int, col: Int, v: T) = {
      data[row * cols + col] = v
   }
}
Run Code Online (Sandbox Code Playgroud)

我添加了一个工厂函数,它看起来像第二个构造函数,但是在内联函数中实现

class Matrix2d<T>(val rows: Int, val cols: Int, private val …
Run Code Online (Sandbox Code Playgroud)

generics kotlin

13
推荐指数
1
解决办法
5934
查看次数

如何在Kotlin中获取泛型类型参数的类

我想从泛型类型获取类属性T.我决定延伸到Any但是我收到了一个错误. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html#extension-properties

我有以下代码:

class FirebaseDBRepo<T : Any>(val child:String) {

private var callback: FirebaseDatabaseRepositoryCallback<T>? = null
private val ref: DatabaseReference
private val listener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {

        //T::class.java is showing the error cannot use t as reified type parameter use class instead

        val gameDS = dataSnapshot.getValue(T::class.java)
        callback!!.onSuccess(gameDS!!)
    }

    override fun onCancelled(databaseError: DatabaseError) {

    }
}

init {
    ref = FirebaseDatabase.getInstance().reference.child(child)
}


fun addListener(callback: FirebaseDatabaseRepositoryCallback<T>) {
    this.callback = callback
    ref.addValueEventListener(listener)
}

fun …
Run Code Online (Sandbox Code Playgroud)

generics android kotlin firebase-realtime-database

4
推荐指数
2
解决办法
3831
查看次数