ツールバーの
6469 ワード
コトリンの番組を見てみましょう.
クラス変数をPropertyと呼びます. 変数のように見えますが、実際にはgetter、setter関数が内蔵されています. Javaでは のブロック({...})propertyは、クラスに含まれていない上位変数またはクラス内部で宣言された変数のみ使用できます.(領域変数xを使用)
パーセント値を格納フィールド値 get(),set()メソッドでは,フィールドを介してPropertyの値 にアクセスする.
Java形式でset()、get()メソッドを使用してname変数のコードにアクセスします.
の値を得るためにnameを返し、nameの値を得るためにget()関数を呼び出す.無限再帰ループを囲む. user.name="jang"は実際にUserクラスを呼び出すset()と同じです. ユーザクラスのset()から見ると、name変数に直接値を付与します.set()関数内でもset()関数が呼び出されます. したがって、StackOverflowが発生しない場合は、以下に示すように、BackFieldを使用してコードを変更することができます. BackFieldとBackProperty Kotlin基礎課5::専門と後ろ盾フィールド
🤔 専攻は何ですか。
클래스의 field + 접근자 메소드 = 프로퍼티
と呼ばれています.fun main(args: Array<String>) {
val user = User()
println("Name: ${user.name}, Age: ${user.age}")
}
class User {
var name: String = "jang"
/* get() = field
set(value) {
field = value
}*/
val age: Int = 10
// get() = field
}
コメントを削除しても同じ結果が出力されます.user.name = "kim" or println("${user.name}")
が実行されると、set()、get()メソッドが内部的に呼び出されます.Backing field
フィールドで直接近づかないで
Java形式でset()、get()メソッドを使用してname変数のコードにアクセスします.
fun main(args: Array<String>) {
val user = User()
user.name = "jang"
println("Name: ${user.name}, Age: ${user.age}")
}
class User {
var name: String
get() = name
set(value) {
name = value
}
val age get() = 10
}
get()とset()の両方でStackOverFlowが発生します.get()の場合
set()の場合
class User {
var name: String = "jang"
get() = field
set(value) {
field = value
}
val age get() = 10
}
Backfieldを使用するルール
1. get(), set() 내부에서는 field 값으로 접근한다.
2. var로 선언한 프로퍼티는 set(), get() 둘 다 정의할 수 있지만 val은 get()만 가능하다.
👏 リファレンス
Reference
この問題について(ツールバーの), 我々は、より多くの情報をここで見つけました https://velog.io/@jms8732/프로퍼티Propertyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol