dha*_*sav 5 generics type-inference couchbase kotlin testcontainers
我有一个java类
public class CouchbaseContainer<SELF extends CouchbaseContainer<SELF>>
Run Code Online (Sandbox Code Playgroud)
当我尝试在 kotlin 中为此创建对象时
val couchbase = CouchbaseContainer()
Run Code Online (Sandbox Code Playgroud)
Kotlin 抛出错误
类型推断失败:没有足够的信息来推断构造函数 CouchbaseContainer!> () 中的参数 SELF。请明确说明
但我可以在 Java 中创建这个对象,如下所示:
CouchbaseContainer couchbase = new CouchbaseContainer();
Run Code Online (Sandbox Code Playgroud)
问题是,在 Java 字节码中没有泛型的概念(称为类型擦除),因此您的类型SELF
不会出现在字节码中。这就是为什么在 Java 中您可以创建实例而不指定 的实际值SELF
。
不过,在 Kotlin 中,我猜编译器会认为这CouchbaseContainer
是通用的,并且需要您提供实际SELF
值。事实上,错误消息是这样的:
类型推断失败:没有足够的信息来推断参数 T
Run Code Online (Sandbox Code Playgroud)constructor Foo<T : Any!> ( )
请明确指定。
另请注意,如果可以推断类型(例如,因为您通过构造函数传递它),则不需要提供它,如以下示例所示(摘自文档):
class Box<T>(t: T) {
var value = t
}
val box = Box(1) // T is inferred to be Int
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
542 次 |
最近记录: |