我有一个java课

public class CouchbaseContainer<SELF extends CouchbaseContainer<SELF>>

当我尝试在Kotlin中为此创建对象时
val couchbase = CouchbaseContainer()

Kotlin抛出错误



但我能够在Java中创建此对象,如下所示:
CouchbaseContainer couchbase = new CouchbaseContainer();

最佳答案

问题是在Java字节码中没有泛型的概念(称为type erasure),因此您的类型SELF将不会出现在字节码中。这就是为什么在Java中允许您创建实例而不指定SELF的实际值的原因。

但是,在Kotlin中,我猜编译器会看到CouchbaseContainer是通用的,它要求您提供实际的SELF值。确实,错误消息是这样的:



另外,请注意,如果可以推断类型(例如,因为您通过构造函数传递了该类型),则无需提供它,如以下示例所示(取自documentation):

class Box<T>(t: T) {
    var value = t
}

val box = Box(1) // T is inferred to be Int

08-17 21:56