2017-06-26 8 views
4

私はクラスの内側では変更できますが、外側では変更できないプロパティが必要なインターフェイスを持っています。 varを使用することはできません。これは、可変である必要があり、varキーワードは指定されたプライベートセッターを持つことができません。抽象プライベートゲッターとパブリックセッターを追加する正しい方法は何ですか?

public <T> getMyProperty(); 

私はkotlinに同じアプローチを使用し、ちょうどdirrectly getter関数を書くことができますが、これはkotlinlikeアプローチのように見えるしていません:

はJavaで私はこれが行われているだろう。これと同じことを達成するための良い方法はありますか?次のようにKotlinで 楽しいgetMyProperty()

+1

これは明らかではありません。あなたはプライベートゲッターをQタイトルに書いておき、例としてパブリックゲッターを表示します。実際、「抽象的なプライベート」は理にかなっていません。 – weston

答えて

8

、あなたが実際にvaroverridevalは、そう、私が思うに、あなたが欲しいのは表現することができることができます。

interface Iface { 
    val foo: Foo 
} 

class Impl : Iface { 
    override var foo: Foo 
     get() = TODO() 
     private set(value) { TODO() } 
} 

または、valをバッキングフィールドとデフォルトアクセサのプロパティでオーバーライドできます。

class ImplDefaultGetter : Iface { 
    override var foo: Foo = someFoo 
     private set 
} 

どちらの場合でも、プライベートセッターの変更と存在は、クラスの実装の詳細になり、インターフェイスを通じて公開されません。

関連する問題