2017-10-25 9 views
0

私はそれがセット内のバッキングフィールドまたはget.にしかアクセスできないことを見つけるクラスの他の場所でバッキングフィールドにアクセスする方法はありますか?例えば、 。これは常に本当のdata.In以前を格納するための新しい変数を宣言する必要がコトリンアクセスバッキングフィールドは他の場所にありますか?

var width:Int=0 
get() { 
    return field*10; 
} 
set(value) { 
    field=value/10; 
} 

は私が本当の値にアクセスしたいが、それは、何のフィールドキーワード10

私はC#を使用して存在しない倍数ではありませんたとえば、それは私がちょうど_valueにアクセスすることができ、私はクラスの実際の値にアクセスしたい場合は、何かがそう

private var _width=0; 
var width:Int 
get() { 
    return _width*10; 
} 
set(value) { 
    _width=value/10; 
} 

のように見えるだろうです。 しかし、kotlinでは、これらの冗長な宣言なしで、どこかでバッキングフィールドにアクセスできますか?

答えて

1

Kotlin、あなたは、この「暗黙のバッキングフィールド」スキームに収まらない何かをしたい場合、あなたはいつも戻ったに落ちることができるバッキングプロパティに

バッキングプロパティ

を使用することができますプロパティをバックアップ:デフォルトのゲッターとセッターとのプライベートプロパティへのアクセスが最適化されているので、すべての点で

private var _table: Map<String, Int>? = null 
public val table: Map<String, Int> 
    get() { 
     if (_table == null) { 
      _table = HashMap() // Type parameters are inferred 
     } 
     return _table ?: throw AssertionError("Set to null by another thread") 
    } 

を、これは単にJavaの場合と同様である無関数cようにすべてのオーバーヘッドが導入されます。

2

いいえあなたのC#の例は、Kotlinでうまく動作します。backing propertyと呼ばれています。

関連する問題