我收到一个错误,要求成员声明,我不知道为什么。我一直在尝试查找内容,但似乎找不到为什么这是无效的答案。我可以做val listOfArr = ArrayList<Array<String>>()
就好了。为什么这不起作用?
class Implements: IPatternCheck {
override fun <Array<String>> check(classData: ClassData, value: Array<String>): Boolean {
return true
}
}
这是我的界面
interface IPatternCheck {
fun<T> check(classData: ClassData, value: T): Boolean
}
如果你的接口声明了一个带有类型参数的函数,那么当你重写它时,你必须保持该类型参数不变 - 所以你必须在你的类中为它创建这个覆盖:
override fun <T> check(classData: ClassData, value: T): Boolean {
// TODO
}
要使其采用特定类型,您应该使接口泛型而不仅仅是其中的函数,并使用作为类型参数传递的特定类型实现接口:
interface IPatternCheck<T> {
fun check(classData: ClassData, value: T): Boolean
}
class Implements: IPatternCheck<Array<String>> {
override fun check(classData: ClassData, value: Array<String>): Boolean {
// TODO
}
}
编辑,回答下面评论中的问题。如果这样做:
override fun <String> check(classData: ClassData, value: String): Boolean {
// TODO
}
。您所做的只是将 T
type 参数重命名为 String
(相当令人困惑(。您实际上并没有使用存储字符序列的 kotlin.String
类。
例如,您仍然可以使用任何第二个参数调用 Implements
的实例,它不会仅限于 kotlin.String
。它仍然是一个通用函数。
val implements = Implements()
implements.check(ClassData(), "foo")
implements.check(ClassData(), 25)
此外,您不能访问参数上的任何kotlin.String
函数:
override fun <String> check(classData: ClassData, value: String): Boolean {
value.length // Unresolved reference: length
}