2016-03-15 8 views
11

私は(外部のライブラリから)Javaクラスを持っています。今それは、私が理解したようJavaクラスに「静的な」拡張機能を追加することは可能ですか?例えば

A.foo() // This is call of extension function `foo` from Kotlin code 

class A {} // This is Java class 

私はKotlinに書かれた拡張機能を追加して、それを呼び出したいですKClass-es with companion objectの「静的な」拡張機能のみをサポートしているため、Kotlinでは不可能です。右?

後でKotlinでこのような機能を実装するのを防ぎたいとは思えません。右?

+0

なぜこれが必要ですか?あなたはそれを呼び出すためにドット構文を持つクラス名を使う必要がないという点を除いて、同じ効果を得るためにパッケージ内の正規関数を定義することができます。いくつかのクラスで静的メソッドを見つけるためにリフレクションを使用することを期待している場合、それは別の話です... –

+0

Kotlinはそのようなことを促進するので、 'foo(A)'の代わりに 'A.foo()'構文を使用したいクラスの機能を拡張するための構文(最初の段落[here](https://kotlinlang.org/docs/reference/extensions.html#extensions)を参照)。 –

+2

右の拡張機能とプロパティは、クラスの*インスタンス*用です。ここにはインスタンスはなく、関数呼び出しだけです。 –

答えて

22

あなたはそうです。 Kotlin 1.0では、Kotlinクラスのコンパニオンオブジェクトに拡張関数を定義することができ、そのような関数はA.foo()構文を使用して呼び出すことができます。 Javaクラスでの静的拡張関数の定義のサポートは、Kotlinの将来のバージョンでは可能な機能ですが、現時点ではKotlin 1.1のロードマップにはありません。

+1

こんにちは、それについてのニュースはありますか? – elect

+0

@electこれは、1.1または1.2のロードマップにはまだありません。 – yole

+1

これはすべきです!私たちはこれを常にSwiftで使用しています。これはかなりのシナリオ(Date.fromJSON(...))で役立つ傾向があります。 – Marchy

関連する問題