注释必须调用超级的接口函数

我正在创建接口和一些function,它有一个机构。 需要的是,实现此接口的类在执行其他代码之前,必须在覆盖函数中调用super。 我怎样才能做到这一点?

interface Watcher { fun funWithoutBody() fun startWatching() { //do some important stuff which must be called } } 

在某些情况下,Android Studio / IntelliJ IDEA可以处理这种事情,但是这不是通过注释来完成的,而是通过代码检查来完成的 。

例如MissingSuperCall是IntelliJ IDEA支持的Android Lint Check ( 在IntelliJ IDEA 11.1 | IntelliJ IDEA博客中与Android Lint工具集成 )。

如果您使用的是Android Studio或IntelliJ IDEA,则可以创建自定义检查: IntelliJ IDEA 2016.2 Help ::创建自定义检查 。

我意外地发现了我正在寻找的东西。 这是android.support.annotation包中的@CallSuper注解。 文件

使用@CallSuper注释来validation重写方法调用方法的超级实现。 以下示例注释了onCreate()方法,以确保任何重写的方法实现都调用super.onCreate():

 @CallSuper protected fun onCreate(savedInstanceState: Bundle?) { } 

你可以开始startWatching抽象,并在另一个函数中调用它。 例如:

 interface Watcher { fun funWithoutBody() fun userDefinedStartWatching() fun startWatching() { //insert code you'd normally want to be called when using super() userDefinedStartWatching() } }