1.0.1 より前のバージョンの Kotlin のコードを再確認すると、拡張プロパティが機能しなくなっているようです。実際、それはまだありますが、オーバーライドすることはできなくなりました。
このクラスを考えてみましょう:
class TestClass {
override val loggerName: String
get() = "A new name"
fun aMethod() {
info("test info message")
}
}
Kotlin 1.0.1より前では、次の拡張機能がある場合、これは機能します。
val Any.loggerName: String
get() = javaClass.simpleName!!
fun Any.info(message: String) {
//...
}
loggerName は、デフォルトで問題のインスタンスのクラス名を取ります。現在、この場合、loggerName はTestClassに正しく割り当てられていますが、オーバーライドすることはできません。
これは偶発的なバグですか、それともこの新しいバージョンの Kotlin の新しい制限ですか? Kotlin - Extensionsを検索しましたが、動作するはずであることがわかりました。
テクニカル:
Kotlin プラグイン バージョン 1.0.1-release-IJ143-32 を使用して IntelliJ IDEA 2016.1 でこれをテストしています。
編集1:
TestClass はこのプロパティを認識しませんが、TestClass のインスタンス (例: instanceOfTestClass.loggerName
) にアクセスすると認識されます。