Kotlin 中是否有与以下 C# 代码等效的代码?
public T New<T>() where T:new()
{
return new T();
}
我知道我可以使用反射在运行时构造类型并执行错误检查,这是最好的选择吗?
这在 Kotlin 中是不可能的,原因有两个:
T
,因此不可能构造它。where T:new()
的构造可以确保类具有无参数构造函数。我们可以通过使用具体化类型和反射在某种程度上解决第一个问题:
fun main() {
val foo: Foo = create()
val bar: Bar = create()
}
class Foo
class Bar
inline fun <reified T> create(): T {
return T::class.constructors.single { it.parameters.isEmpty() }.call()
}
这远非理想。我们仍然无法从完全通用的上下文中调用该函数。另外,如果一个类没有无参数构造函数,它将在运行时抛出异常。
Kotlin 中更典型的模式是提供生产者:
fun main() {
val foo = create(::Foo)
}
fun <T> create(producer: () -> T): T = producer()
我怀疑这对你来说不是很有用。