2017-10-17 17 views
-2

私はKotlinを新しくしました 私は(name)と(age)プロパティを持つPersonクラスを持っています。 は、どのように私は、私はこのケースではセッターを使用することができますどのように拡張プロパティーKotlin

var Person.phone: Int 
    get() = this.phone 
    set(value) {this.phone = value} 

のようなPersonクラスの拡張プロパティを設定することができますか? ありがとうございます。

+1

私が質問を正しく理解している場合は、バッキングフィールドを持つ拡張プロパティが必要です。拡張機能はクラスを変更しないため、これは不可能です。しかし、この動作をデリゲートでエミュレートしようとすると、[私の質問への回答](https://stackoverflow.com/a/36511438/2196460)を参照してください。 – hotkey

+0

しかし、どうやってセッターメソッドを使うことができますか? – FinalDest

+0

ああ、プロパティに値を代入するだけです: 'person.phone = 12345' – hotkey

答えて

0

コトリンがあなたが望むものを達成できるかどうかは不明です。 docsから

:拡張子が実際に クラスにメンバーを挿入していないので、

注意、拡張プロパティが バッキングフィールドを持っているための効率的な方法はありません。これは、拡張子が のプロパティに対してイニシャライザが許可されない理由です。それらの動作は、明示的に getters/settersを提供することによってのみ定義できます。

プロパティのバッキングフィールドを追加することはできませんので、この方法で既存のクラスに格納されたデータのビットを実際に追加することはできません。

さらに、追加するにはPersonを拡張する必要があります。

関連する問題