Bagaimana cara memeriksa kelas "instanceof" di kotlin?

95

Di kelas Kotlin, saya memiliki parameter metode sebagai objek (Lihat Kotlin doc di sini ) untuk jenis kelas T . Sebagai objek saya melewati kelas yang berbeda ketika saya memanggil metode. Di Java kita bisa membandingkan class dengan instanceofobject class yang mana.

Jadi saya ingin memeriksa dan membandingkan pada saat runtime Kelas mana itu?

Bagaimana cara memeriksa instanceofkelas di kotlin?

pRaNaY
sumber

Jawaban:

213

Gunakan is.

if (myInstance is String) { ... }

atau sebaliknya !is

if (myInstance !is String) { ... }
nhaarman
sumber
33

Menggabungkan whendan is:

when (x) {
    is Int -> print(x + 1)
    is String -> print(x.length + 1)
    is IntArray -> print(x.sum())
}

disalin dari dokumentasi resmi

methodignature
sumber
1
Ya, ini cara idiomatik.
StephenBoesch
15

Kita dapat memeriksa apakah suatu objek sesuai dengan tipe yang diberikan saat runtime dengan menggunakan isoperator atau bentuk negasinya !is.

Contoh:

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

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

Contoh Lain dalam kasus Objek Kustom:

Biarkan, saya memiliki objtipe CustomObject.

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

if (obj !is CustomObject) {
    print("obj is not of type CustomObject")
}
Avijit Karmakar
sumber
4
Perhatikan satu hal bagus lainnya di sini: di dalam blok if, objsecara otomatis dilemparkan ke String. Jadi Anda bisa menggunakan properti seperti lengthsecara langsung, tanpa perlu mentransmisikan secara eksplisit objke Stringdalam blok.
Jesper
7

Anda dapat menggunakan 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 */ }
}
ice1000
sumber
3

Coba gunakan kata kunci yang disebut is Referensi halaman resmi

if (obj is String) {
    // obj is a String
}
if (obj !is String) {
    // // obj is not a String
}
Terril Thomas
sumber
Senang sekali bisa memberi jawaban dengan dokumen resmi. Tetapi praktik yang lebih baik untuk menambahkan kode sampel sebagai jawaban, akan sangat membantu jika tautan mati. Terima kasih atas jawabannya.
pRaNaY
Jawaban yang hanya ditautkan tidak disukai.
Jayson Minard
0

Anda bisa memeriksanya seperti ini

 private var mActivity : Activity? = null

kemudian

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

    if (context is MainActivity){
        mActivity = context
    }

}
Bala
sumber
0

Anda dapat membaca Dokumentasi Kotlin di sini https://kotlinlang.org/docs/reference/typecasts.html . Kita dapat memeriksa apakah suatu objek sesuai dengan tipe yang diberikan saat runtime dengan menggunakan isoperator atau bentuk negasinya !is, misalnya menggunakan 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
}

kemudian di fungsi utama saya mencoba untuk mencetak dan menampilkannya di terminal:

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

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

Ini adalah hasilnya

6
500
Cara Cevin
sumber
-1

Solusi lain: KOTLIN

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

if (fragment?.tag == "MyFragment")
{}
Álvaro Agüero
sumber