属性とフィールド
3288 ワード
ディレクトリプロジェクトのソースコードkotlin-classプロジェクトに戻る
プロパティは初期化され、直接値が割り当てられていない場合はコンストラクション関数に書き込む必要があります.
マスターコンストラクション関数の属性を宣言するには、次の手順に従います.
属性を宣言する、二次構造関数の初期化または
初期化の属性を直接割り当てます.
完全な属性宣言構文:
初期化式、getter、setterはオプションです.
属性タイプが初期化式で推定できる場合、getterのreturn戻り値から推定できる.
Backing Fields
Kotlinではjavaのgetter,setterがデフォルトで実装されている.しかし、カスタマイズして論理を修正することもできる.
注意:コンストラクション関数で初期化しない場合、var変数は初期化式を使用する必要がありますが、val変数はgetterで初期化式の代わりに使用できます.
上記のプロパティをテストして検証します.
アクセサgetter setterの可視性
Compile-Time Constants
コンパイル時定数:-Top-level or member of an object-Initialized with a value of type String or a primitive type-No custom getter
このような属性は注釈で使用できます.
遅延初期化プロパティ(Late-initialized Properties)
注入または試験方法に依存する
カタログに戻る
プロパティは初期化され、直接値が割り当てられていない場合はコンストラクション関数に書き込む必要があります.
マスターコンストラクション関数の属性を宣言するには、次の手順に従います.
class PfA(val a: Int, var b: Int)
属性を宣言する、二次構造関数の初期化または
init
ブロックの初期化を行う.class PfB {
var a: Int
val b: Int
val c: Int?
// val, var
constructor(a: Int, b: Int, c: Int) {
this.a = a
this.b = b
this.c = c
}
}
class PfBB(a: Int, b: Int) {
val a = a
val b: Int
init {
this.b = b
}
}
初期化の属性を直接割り当てます.
class PfC {
var a = 0
val b = 1
// val , var !
// backing field
val c get() = true
}
完全な属性宣言構文:
var [: ] [= ]
[]
初期化式、getter、setterはオプションです.
属性タイプが初期化式で推定できる場合、getterのreturn戻り値から推定できる.
// val getter, setter
// getter ,
val allByDefault
get() = 1 // val getter,
Backing Fields
Kotlinではjavaのgetter,setterがデフォルトで実装されている.しかし、カスタマイズして論理を修正することもできる.
注意:コンストラクション関数で初期化しない場合、var変数は初期化式を使用する必要がありますが、val変数はgetterで初期化式の代わりに使用できます.
// Backing Fields
// field , getter setter , .
var getsetvar: Int = 1
set(value) {
field = value + 1
}
// getter
var getsetvar2: Int = 1 //
get() {
if(field == 1) {
println(" 1, 0")
return 0
}
return field
}
set(value) {
field = value + 1
}
上記のプロパティをテストして検証します.
@Test fun testProperties() {
// 1
assertEquals(1, address.getsetvar)
// 2
address.getsetvar = 2
// setter 1, 3
assertEquals(3, address.getsetvar)
}
@Test fun testProperties2() {
// 1, getter 1 0
assertEquals(0, address.getsetvar2)
// 3, setter 1, 4
address.getsetvar2 = 3
assertEquals(4, address.getsetvar2)
}
アクセサgetter setterの可視性
var setterVisibility: String = "abc"
private set // the setter is private and has the default implementation
var setterWithAnnotation: Any? = null
@Inject set // annotate the setter with Inject
Compile-Time Constants
コンパイル時定数:-Top-level or member of an object-Initialized with a value of type String or a primitive type-No custom getter
このような属性は注釈で使用できます.
const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"
@Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }
遅延初期化プロパティ(Late-initialized Properties)
注入または試験方法に依存する
@setup, @before
などの方法で再初期化を行う.public class MyTest {
lateinit var subject: TestSubject
@SetUp fun setup() {
subject = TestSubject()
}
@Test fun test() {
subject.method() // dereference directly
}
}
カタログに戻る