web-dev-qa-db-ja.com

静的メソッドをJava Kotlinのクラスに追加するにはどうすればよいですか?

KotlinJava.lang.Mathクラスに新しい静的メソッドを追加することは可能ですか?通常、このようなことは Kotlin Extensions のおかげでKotlinで可能です。

作成したファイルExtensions.ktで次のことをすでに試しました:

fun Math.Companion.clamp(value:Double,minValue:Double,maxValue:Double):Double
{
    return Math.max(Math.min(value,maxValue),minValue)
}

しかし、Math.Companionは解決できませんでした...

39
Eric

Kotlin 1.3以降、これは不可能です。ただし、今後のリリースで検討中です!

この機能の実装を支援するには、この問題に投票してください: https://youtrack.jetbrains.com/issue/KT-11968

このアイデアはKotlinコミュニティで非常に人気があるため、すぐに利用できるようになると思います。

34
Supuhstar

これは不可能だと思います。 ドキュメントによると 以下:

クラスにコンパニオンオブジェクトが定義されている場合は、コンパニオンオブジェクトの拡張関数とプロパティを定義することもできます。

MathクラスはJavaクラスであり、Kotlinクラスではなく、companionオブジェクトが含まれていません。代わりに、clampメソッドをDoubleクラスに追加できます。

12
aga

Kotlin 1.2の時点では、まだ不可能です。

回避策として、現在使用している環境クラスを静的に「拡張」するには、次のようにします。

Class EnvironmentExtensions {
    companion object {
        @JvmStatic
        fun getSomething(): File {
            ...
            return Environment.something()
        }
    }
}

これは理想的なソリューションではありませんが、IntelliJ/Android Studioのコード補完は使用方法に役立ちます。

val something = EnvironmentExtensions.getSomething()
2