🎈Kotlin紀行5日目
前回の旅行
作成者(2)
サブジェネレータ
サブジェネレータはclass{constructor(パラメータ名:データ型)}を使用して宣言できます.
class Car{
constructor(color: String){
println(color)
}
}
fun main(args: Array<String>) {
val K3 = Car("white")
}
セグメントジェネレータのパラメータcolorは、セグメントジェネレータでのみ使用できます.したがって、クラス全体で親ジェネレータのパラメータを使用する場合は、クラスのプロパティに代入する必要があります.class Car{
var color:String=""
constructor(color: String){
this.color=color
}
fun carColor(){
println(this.color)
}
}
fun main(args: Array<String>) {
val K3 = Car("white")
K3.carColor()
}
プライマリおよびセカンダリジェネレータの使用
1つのクラスに1つのプライマリジェネレータしかありません.
複数の作成者が必要な場合は、プライマリ作成者とセカンダリ作成者を同時に使用する必要があります.
プライマリ作成者が宣言されている場合は、セカンダリ作成者を宣言するときにプライマリ作成者を同時に呼び出す必要があります.
class Car(color: String){
init {
println("주 생성자의 init")
}
constructor(color: String,name: String,number:Int):this(color){
println("부 생성자")
}
}
fun main(args: Array<String>) {
val myCar = Car("white","k3",13)
}
上のコードでは、サブジェネレータの後ろにthis(color)が表示されます.これは、カラーでパラメータを受信する作成者、すなわちプライマリ作成者を呼び出すことを意味する.
上記のコードを実行すると、
これに基づいて、親ジェネレータを呼び出すときに、まずプライマリジェネレータを呼び出し、次にサブジェネレータを呼び出すことがわかります.
getとset
getとsetは、オブジェクトがPropertyを受信または変更するときに呼び出される関数です.
本来はgetとsetを自動的に追加しますが、直接定義することもできます.
class Car() {
var name:String="Lee"
get() {
println("정보 호출")
return field
}
set(value) {
println("set 호출 "+value)
field="my $value"}
}
Car classはname propertyでget関数とset関数を指定します.get関数は、オブジェクトのプロパティを呼び出すときに自動的に実行される関数です.main関数で
fun main(args: Array<String>) {
val myCar = Car()
myCar.name
}
オブジェクト名.プロパティを使用する場合get関数を出力する「情報呼び出し」機能が機能し、フィールド値が返されます.ここで、フィールド値はPropertyの値です.
set関数は、オブジェクトの構成を変更するときに自動的に実行される関数です.
fun main(args: Array<String>) {
val myCar = Car()
myCar.name="k3"
}
プロセスの初期化
classでPropertyを宣言する場合は、この値を初期化する必要があります.
ただし、宣言後に値を初期化する必要がある場合があります.
私はこのような状況にどのように対応するかを学びます.
Initから初期化
class Person() {
val name:String
val age:Int
init {
name="Lee Room"
age=17
}
}
上記のコードでnameとageを宣言すると、初期化されていなくてもコードは正常に動作します.Initは、オブジェクトを作成し、最初の実行時にPropertyを宣言するときに初期化する必要はありません.
nullの初期化を許可する
class Person{
var name:String?=null
var age:Int?=null
constructor(name:String,age:Int){
this.name=name
this.age=age
}
}
上記のコードのフォーマットは、Propertyの作成時にnullを初期値とし、ジェネレータの実行時にジェネレータのパラメータをPropertyに代入します.lateinit
lateinit(遅延の初期化)は初期化時間を遅延します.
class Person {
lateinit var name: String
fun initLate(name: String) {
this.name = name
}
}
上のコードでは、nameをlateinitに初期化した後、initLate関数が初期化します.lateinitを使用するとnullを追加することなく初期化時間を遅らせることができます.ただし、latinitは次の条件を満たす必要があります.
by lazy
Lazyはvalとして宣言されたプロセスの初期化時間をプロセスが使用される時点に遅らせる.
class Person {
val name: String by lazy {
println("by lazy")
"Lee Room"
}
}
上記のコードでは、bylazyによってname propertyを使用するときにname propertyを初期化できます.bylazyには、初期化時に実行される構文も含まれます.by lazyにも使用条件があります.
今日の感想
Reference
この問題について(🎈Kotlin紀行5日目), 我々は、より多くの情報をここで見つけました https://velog.io/@jinstonlee/Kotlin-여행기-5일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol