在Java中,我们有Class::new构造函数引用的语法.我知道,方法有可调用的引用,但构造函数如何?我的一个典型用例是工厂.
我有一个包含T和一些元数据的数组(或列表)的接口.
interface DataWithMetadata<T> {
val someMetadata: Int
fun getData(): Array<T>
}
Run Code Online (Sandbox Code Playgroud)
如果我编写最简单的接口实现,我会得到一个编译错误emptyArray():"不能使用T作为一个改进的类型参数.请改用类."
class ArrayWithMetadata<T>(override val someMetadata: Int): DataWithMetadata<T> {
private var myData: Array<T> = emptyArray()
override fun getData(): Array<T> {
return myData
}
fun addData(moreData: Array<T>) {
this.myData += moreData
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将接口和实现都更改为列表,我没有编译时问题:
interface DataWithMetadata<T> {
val someMetadata: Int
fun getData(): List<T>
}
class ListWithMetadata<T>(override val someMetadata: Int): DataWithMetadata<T> {
private var myData: List<T> = emptyList()
override fun getData(): List<T> {
return myData
}
fun addData(moreData: Array<T>) { …Run Code Online (Sandbox Code Playgroud) 在Kotlin中获取泛型类型实例的最佳方法是什么?我希望找到以下C#代码的最佳(如果不是100%完美)近似值:
public T GetValue<T>() where T : new() {
return new T();
}
Run Code Online (Sandbox Code Playgroud)