Kotlin类实现Java接口错误

时间:2017-08-21 15:15:43

标签: java class interface kotlin implementation

我有一个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

任何想法有什么不对?

3 个答案:

答案 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
    }
}