2017-05-28 10 views
2

このような注釈付きタイプに対してKotlin拡張機能を定義することはできますか?注釈付きタイプの拡張機能

@ColorInt 
fun @ColorInt Int.darken(): Int { 
    return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) 
} 

代替形式:

@ColorInt 
fun (@ColorInt Int).darken(): Int { 
    return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) 
} 

次の静的目的球に対応するであろう:

@ColorInt 
fun darken(@ColorInt color: Int): Int { 
    return ColorUtils.blendARGB(color, Color.BLACK, 0.2f) 
} 

私はKotlinを使用して、まだ可能性はないと思うが、それはすることは可能であろう後でKotlinのバージョンでその機能を追加しますか?

サイドノート: 同じ質問が@IntDef,@StringDef@[resource type]Resにも適用されます。

+0

zsmb13 http://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targetsが、これは同じシグネチャを持つ倍増した方法でいくつかの問題を引き起こす可能性があることを説明する良い点を持っていた:注釈の使用サイトのターゲットに関する

@ColorInt fun @receiver:ColorInt Int.darken(): Int { return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) } 

詳細:次の構文を使用します。とにかく、その関数の別のJVMメソッド名に注釈を付けることで解決できます。 – Heinrich

答えて

6

はいできます。

+0

それは素晴らしいです!私はIntelliJが自動的に、@ ColorIntというアノテートされていないメソッドの拡張機能を自動的に隠すだろうと思います。 – Heinrich

+1

いいえ、 '@ ColorInt'はLintによって評価されるアンドロイド特有のアノテーションです。 LintはKotlinのコードをサポートしているので、アノテートされていないintでメソッドを呼び出すと警告が表示されますが、メソッドを呼び出すことはできます。 –

+0

これは予想どおりです。 – Heinrich

関連する問題