Base 类( var 需要保持受保护):
public static string MapDataTypes(SqlDbType sqlDataType, int size)
{
switch (sqlDataType)
{
case SqlDbType.Int:
return "INT";
case SqlDbType.VarChar:
return "TEXT(" + size + )";
.....
}
}
有一个界面需要使用 val :
open class Base(protected var id: Int) {}
还有一个类继承自 Base 并实现 ProviderI 接口。我正在尝试使用超类 var (具有相同名称)来实现界面 val 。 作为一个不起作用的例子,我试图做那样的事情(例子不起作用):
interface ProviderI {
val id: Int
}
这个想法很简单,但我已经尝试了所有内容,并且每次报告不同的错误。
答案 0 :(得分:3)
要覆盖多个超类型中存在的成员,Kotlin要求所有超类型中的open
,并且此限制看起来很自然,因为否则final
成员可以很容易地以这种方式覆盖。
解决方案是在id
中打开Base
并将其覆盖为var
属性:
open class Base(protected open var id: Int)
interface ProviderI {
val id: Int
}
class Instance(id: Int): Base(id), ProviderI {
override var id: Int
get() = super.id
set(value) { super.id = value }
}
答案 1 :(得分:1)
Kotlin不允许val
属性覆盖var
属性。
最贴心的事情:
open class Base(protected open var id: Int) {}
interface ProviderI {
val id: Int
}
class Instance(id: Int): Base(id), ProviderI {
override var id: Int = 0
get() { return super.id }
}