我有一个Java界面
public interface SampleInterface extends Serializable {
Long getId();
void setId(Long id);
}
和一个应该实现它的Kotlin类
open class ClazzImpl() : SampleInterface
private val id: Unit? = null
fun getId(): Long? {
return null
}
fun setId(id: Long?) {
}
但是我收到了编译错误:
类ClazzImpl不是抽象的,也不实现抽象成员 public abstract fun setId(id:Long!):单位定义于 COM .... SampleInterface
任何想法有什么不对?
答案 0 :(得分:5)
Egor和tynn的其他答案很重要,但你在问题中提到的错误与他们的答案无关。
您必须先添加花括号。
open class ClazzImpl() : SampleInterface {
private val id: Unit? = null
fun getId(): Long? {
return null
}
fun setId(id: Long?) {
}
}
如果你添加大括号,那个错误就会消失,但你会得到一个像这样的新错误:
'getId'隐藏了超类型'SampleInterface'和需要的成员 '覆盖'修饰符
现在,正如其他答案中所建议的那样,您必须在函数中添加override修饰符:
open class ClazzImpl() : SampleInterface {
private val id: Unit? = null
override fun getId(): Long? {
return null
}
override fun setId(id: Long?) {
}
}
答案 1 :(得分:4)
您必须在override
之前添加fun
关键字:
override fun getId(): Long? {
return null
}
override fun setId(id: Long?) {
}
答案 2 :(得分:1)
在 Kotlin 中实现界面时,必须确保覆盖类主体中的接口方法:
open class ClazzImpl() : SampleInterface {
private var id: Long? = null
override fun getId(): Long? {
return id
}
override fun setId(id: Long?) {
this.id = id
}
}