代码之家  ›  专栏  ›  技术社区  ›  Dimitar Spasovski

kotlin接口中的Final方法

  •  0
  • Dimitar Spasovski  · 技术社区  · 5 年前

    正如标题所述,我正在寻找在kotlin接口中实现final(不能重写的方法)的方法。 这是我的密码:

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

    下面是我的用例:

    • 我想要那个 delete final 所以它不可能
    • 我想要那个 validateCanDelete deleteNewsItem 要在中重写的方法 接口的实现。

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

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

    0 回复  |  直到 5 年前
        1
  •  4
  •   Frank Neblung    5 年前

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

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