相关疑难解决方法(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
查看次数

如何实例化泛型类型的新实例

在C#中,您可以在泛型上放置一个新约束来创建泛型参数类型的新实例,在Kotlin中是否有等价物?

现在我的工作是:

fun <T> someMethod(class : () -> T) {
    val newInstance = class()
}
Run Code Online (Sandbox Code Playgroud)

而我正在调用someMethod()

someMethod<MyClass>(::MyClass)
Run Code Online (Sandbox Code Playgroud)

但我想做这样的事情:

fun <T : new> someMethod() {
    val newInstance = T()
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

kotlin

14
推荐指数
1
解决办法
3779
查看次数

在Kotlin中实例化T型

总之,我想省略getT()下面例子中的重复.我已经读过在Kotlin中实例化一个泛型类型,但是它() -> T作为一个参数是什么意思?我该如何应用到下面?

interface Food
{
    var isHeated:Boolean;
    var name:String;
}

abstract class Cooker<T:Food>
{
    abstract fun getT():T;
    abstract fun enhance(t:T);
    fun cook(): T
    {
        var food = getT();
        food.isHeated = true;
        food.name = "heated " + food.name;
        enhance(food);
        return food;
    }
}

class PotatoChip:Food
{
    override var isHeated = false;
    override var name = "potato chip";
}

class PotatoChipCooker:Cooker<PotatoChip>()
{
    override fun getT(): PotatoChip {
        return PotatoChip();
    }
    override fun enhance(t:PotatoChip)
    {
        t.name …
Run Code Online (Sandbox Code Playgroud)

kotlin

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

标签 统计

kotlin ×3

class ×1

generics ×1