2016-10-20 8 views
2

私はインターフェイスを作成しています。 このインターフェイスを実装するクラスは、他のコードを実行する前に、関数をオーバーライドする際にsuperを呼び出す必要があります。 どうすればいいですか?スーパーを呼び出さなければならないインターフェイス関数のアノテーション

interface Watcher { 
    fun funWithoutBody() 

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

答えて

3

私が偶然見つけたのは、私が探していたものです。 android.support.annotationパッケージで利用可能な@CallSuper注釈です。 Docs

方法のスーパー実装を呼び出す オーバーライドするメソッドということを検証するために@CallSuperアノテーションを使用してください。次の例 ()は任意のオーバーライドメソッド 実装はsuper.onCreateを呼び出すことを確実にするためのonCreate()メソッドをアノテート:

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

startWatchingを抽象化し、別の関数で呼び出すことができます。例えば:

interface Watcher { 
    fun funWithoutBody() 

    fun userDefinedStartWatching() 

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

しかし、私はIDEによって警告されたいです。あなたがandroidアクティビティでsuper.onDestroy()を呼び出していないときのように、 –

+0

私は知りたい、それがどのように動いているのか知りたい。実際にはコードは私だけで書かれているので、必要ではありません。回避策は必要ありません –

+0

IDEの機能ではなくコードではないと思うので、純粋な記述が可能なのかどうかはわかりませんコトリンコード。 –

3

のAndroidメーカー/のIntelliJ IDEAは、いくつかのケースではこの種のものを行いますが、それは、アノテーションを通じてしかしcode inspectionを介して行われていません。

MissingSuperCallは、IntelliJ IDEAがサポートするAndroid Lint Checkです(Integration with Android Lint tool in IntelliJ IDEA 11.1 | IntelliJ IDEA Blog)。

AndroidスタジオまたはIntelliJ IDEA:IntelliJ IDEA 2016.2 Help :: Creating Custom Inspectionsを使用している場合は、独自のカスタム検査を作成できます。

+0

ありがとう!私が探していたもの –

関連する問題