kotlin接口中的最终方法
正如标题所述,我正在寻找一种在kotlin接口中实现final(无法重写的方法)的方法。 这是我的代码:kotlin接口中的最终方法,kotlin,Kotlin,正如标题所述,我正在寻找一种在kotlin接口中实现final(无法重写的方法)的方法。 这是我的代码: interface NewsItemState { final fun delete(newsItem: NewsItem) { validateCanDelete(newsItem) deleteNewsItem(newsItem) } fun validateCanDelete(newsItem: NewsItem) f
interface NewsItemState {
final fun delete(newsItem: NewsItem) {
validateCanDelete(newsItem)
deleteNewsItem(newsItem)
}
fun validateCanDelete(newsItem: NewsItem)
fun deleteNewsItem(newsItem: NewsItem)
}
下面是我的用例:
- 我希望
函数是delete
,这样它就不能 在接口的实现中重写final
- 我想要这个
和validateCanDelete
中要重写的方法 接口的实现deleteNewsItem
但是,我想知道是否有一种方法可以在接口中实现相同的功能,因为我的
final
方法不会有任何“状态管理”逻辑。虽然在接口中不可能有final方法,但为接口类型定义扩展方法是绝对正确的
interface NewsItemState {
fun validateCanDelete(newsItem: NewsItem)
fun deleteNewsItem(newsItem: NewsItem)
}
fun NewsItemState.delete(newsItem: NewsItem) {
validateCanDelete(newsItem)
deleteNewsItem(newsItem)
}
你是用java实现的吗?或者更清楚地解释一下您的需求是什么?我的需求是在接口中定义一个方法/函数(不是抽象的),该方法/函数不能在该接口的任何实现中被重写。据我所知,我还没有在java中完成它,您也不能在java接口中定义最终方法。它不能在任何实现中被重写意味着它的用途是什么?它的用途是调用在实现中被重写的方法。这种方法会迫使人们做出某种行为。在我提供的示例中,它将首先调用
validateCanDelete
方法(在实现中重写)然后调用在实现中也被重写的deleteNewsItem
方法。在这种情况下,抽象类
似乎是一种解决方法。扩展方法可以在实现类中被重写,因此这不能满足我的第一个要求:“我希望delete函数是最终的,这样它就不能在接口的实现中被重写“@DimitarSpasovski从技术上讲,您不能重写扩展方法,因为它们是静态调度的。您可以在子类中实现具有相同签名的方法;然后,每当编译器知道它引用的是子类时,它就会调用该方法而不是扩展。(该方法可以在子类中重写。)但在超类上调用它总是会给您扩展,因此它不是完全重写。@DimitarSpasovski我很欣慰您认为它澄清了问题:-)