コトリン鋳造、is、as


クラスを実現する際にcastingの概念がある.
https://m.blog.naver.com/wnstn0154/221855117820
https://altongmon.tistory.com/601

0.サンプルコード

open class Drinks{
    var name :String = "음료수"
    open fun Drink(){
        println("${name}을 마십니다.")
    }    
}

class Cola : Drinks(){
    var type :String = "콜라"
    override fun Drink(){
        println("${name}${type}을 마십니다.")
    }
    fun Taste(){
        println("${type}향이 납니다.")
    }
}

1. up casting


アップリンクとは、子を親にすることです.
上のコードはColaクラスがDrinksクラスになることを意味します.
var A: Drinks = Cola()
Colaクラスを使用してDrinksタイプのA変数をColaインスタンスとして作成する場合は、エラーは発生しません.ColaクラスはDrinksクラスを継承しているため、Drinksの関数を再定義しています.(問題xは、Drinkを継承し、Drinkのすべての関数を再定義しなくても)

2. down casting


降格とは、親が子になることです.
上のコードは、DrinksクラスがColaクラスになることを意味します.
var B: Cola = Drinks()

// error: type mismatch 발생
Colaインスタンスが持つべきTaste関数をDrink()として作成するインスタンスはもちろんないため、エラーが発生します.また、Drink関数も異なります.Colaではoverlightが使われているからです.

3. is


isはA is Bの形式で使用され、AがBと互換性があるかどうかに関する情報を返す.
Javaではinstanceofがisの役割を果たします.A instanceof B=>AはBの例ですか?=>AからBをtrueまたはfalseに変換
var A = Drinks()
var B = Cola()

if (A is Cola) {...}
AがColaである場合はtrueを返します.AはColaタイプ、{...}でColaのpropertyを使用できます.
isは、次のように使用することもできます.
val str = "str"

if (str is String) println("good")

if (str !is String) println("not good")
else println("good")
fun castMethod(a: Any) {
	if (a is String) {
        println(a.length) // a가 String 타입으로 자동 캐스팅
    }
}

4. as


同様に、角を選択するときにも使用できます.ターゲット値をasとして指定されたタイプにブロードキャストします(変換)、タイプに変換できない場合はエラーが発生します(ClassCastException).as?を使用すると、エラーではなくnullが返されます.
写真ソース

データがユーザーである場合、データはユーザーに割り当てられます.
そうでなければnullを返します...