Kotlin'de "instanceof" sınıfı nasıl kontrol edilir?


95

Kotlin sınıfında, T sınıfı türü için nesne olarak yöntem parametresine sahibim ( burada kotlin belgesine bakın ) . Nesne olarak metodu çağırırken farklı sınıflardan geçiyorum. Java'da, sınıfın hangi sınıf olduğunu nesneyi kullanarak karşılaştırabiliriz .instanceof

Bu yüzden çalışma zamanında hangi Sınıf olduğunu kontrol etmek ve karşılaştırmak istiyorum?

instanceofKotlin'deki sınıfı nasıl kontrol edebilirim ?

Yanıtlar:


213

Kullanın is.

if (myInstance is String) { ... }

veya tersi !is

if (myInstance !is String) { ... }


15

Bir nesnenin çalışma zamanında belirli bir türe uyup isuymadığını operatörü veya olumsuzlanmış biçimini kullanarak kontrol edebiliriz.!is .

Misal:

if (obj is String) {
    print(obj.length)
}

if (obj !is String) {
    print("Not a String")
}

Özel Nesne durumunda başka bir Örnek:

Benim bir objtipim var CustomObject.

if (obj is CustomObject) {
    print("obj is of type CustomObject")
}

if (obj !is CustomObject) {
    print("obj is not of type CustomObject")
}

4
Burada bir başka güzel bir şey Not: bloğunun içinde if, objotomatik artığını String. Aşağıdaki gibi özelliklerini kullanabilirsiniz Yani lengthgerek kalmadan doğrudan, açıkça atmak objiçin Stringbloğunun içinde.
Jesper

7

Şunları kullanabilirsiniz is:

class B
val a: A = A()
if (a is A) { /* do something */ }
when (a) {
  someValue -> { /* do something */ }
  is B -> { /* do something */ }
  else -> { /* do something */ }
}

3

Resmi sayfa referansı adlı anahtar kelimeyi kullanmayı deneyinis

if (obj is String) {
    // obj is a String
}
if (obj !is String) {
    // // obj is not a String
}

Resmi doc ile cevap vermek harika bir şey. Ancak cevaba örnek kod eklemek daha iyi uygulamalardır, bağlantı ölmüşse yararlıdır. Cevap için teşekkürler.
pRaNaY

Yalnızca bağlantılı yanıtlar tercih edilmez.
Jayson Minard

0

Böyle kontrol edebilirsin

 private var mActivity : Activity? = null

sonra

 override fun onAttach(context: Context?) {
    super.onAttach(context)

    if (context is MainActivity){
        mActivity = context
    }

}

0

Kotlin Belgelerini buradan okuyabilirsiniz https://kotlinlang.org/docs/reference/typecasts.html . Bir nesnenin çalışma zamanında belirli bir türe uygun olup olmadığını isoperatörü veya olumsuzlanmış biçimini !iskullanarak kontrol edebiliriz, örneğin aşağıdaki gibi is:

fun <T> getResult(args: T): Int {
    if (args is String){ //check if argumen is String
        return args.toString().length
    }else if (args is Int){ //check if argumen is int
        return args.hashCode().times(5)
    }
    return 0
}

sonra ana işlevde yazdırmaya ve terminalde göstermeye çalışıyorum:

fun main() {
    val stringResult = getResult("Kotlin")
    val intResult = getResult(100)

    // TODO 2
    println(stringResult)
    println(intResult)
}

Bu çıktı

6
500

-1

Diğer çözüm: KOTLIN

val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)

if (fragment?.tag == "MyFragment")
{}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.