Kotlin界面中的最终方法

时间:2019-11-14 12:33:18

标签: kotlin

正如标题所述,我正在寻找一种在kotlin界面中实现最终形式(无法重写的方法)的方法。 所以这是我的代码:

interface NewsItemState {

    final fun delete(newsItem: NewsItem) {
        validateCanDelete(newsItem)
        deleteNewsItem(newsItem)
    }

    fun validateCanDelete(newsItem: NewsItem)
    fun deleteNewsItem(newsItem: NewsItem)
}

这是我的用例:

  • 我希望delete函数为final,以便不能 在界面的实现中被覆盖。
  • 我想要 validateCanDeletedeleteNewsItem方法将被覆盖 接口的实现。

现在,我知道目前尚不可能,并且接口中不允许将final添加到方法中。我也知道我可以通过用抽象类替换接口来实现此目的。

但是,我想知道是否存在一种在接口中实现相同功能的方法,因为我的final方法不会具有任何“状态管理”逻辑。

1 个答案:

答案 0 :(得分:4)

虽然在接口中不可能有final方法,但是绝对可以为接口类型定义扩展方法。

interface NewsItemState {
    fun validateCanDelete(newsItem: NewsItem)
    fun deleteNewsItem(newsItem: NewsItem)
}

fun NewsItemState.delete(newsItem: NewsItem) {
    validateCanDelete(newsItem)
    deleteNewsItem(newsItem)
}