小编and*_*j88的帖子

如何为带有类型参数的类编写二级构造函数?

假设我有以下类,带有一个类型参数 T(在这个例子中它有界以帮助说明后面的例子,但当它无界时错误仍然存​​在):

class GenericsTest<T : CharSequence>(private var cs: T)
Run Code Online (Sandbox Code Playgroud)

现在假设我想向这个类添加一个辅助构造函数。我怎样才能做到这一点?我的第一次(天真)尝试导致编译器错误:

class GenericsTest<T : CharSequence>(private var cs: T)
{
    // dummy exists to ensure the method signatures are different
    constructor(cs: String, dummy: Int) : this("a") 
}
Run Code Online (Sandbox Code Playgroud)

IntelliJ"a"用以下消息强调:

Type mismatch.
Required: T
Found: String
Run Code Online (Sandbox Code Playgroud)

对我来说,String似乎是一个完全有效的T. 我认为明确指定类型参数会有所帮助,但这似乎是不允许的。这两种尝试都是不正确的语法:

constructor(cs: String, dummy: Int) : this<String>("a")
constructor<U : String>(cs: U, dummy: Int) : this("a")
Run Code Online (Sandbox Code Playgroud)

由于我怀疑所有这些场景都有一个通用的方法,我的主要问题是:

你如何在 Kotlin 中为泛型类编写二级构造函数?或者类似地,当构造函数具有类型参数时,您如何委托给主构造函数?

这甚至可能吗?如果没有,一种解决方法可能是使用辅助函数使用主构造函数创建对象,但这不适用于抽象类。

关于泛型的官方文档没有讨论构造函数。

generics constructor kotlin

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

标签 统计

constructor ×1

generics ×1

kotlin ×1