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?

Jawaban:


213

Gunakan is.

if (myInstance is String) { ... }

atau sebaliknya !is

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


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")
}

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 */ }
}

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
}

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
    }

}

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

-1

Solusi lain: KOTLIN

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

if (fragment?.tag == "MyFragment")
{}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.