Làm thế nào để kiểm tra lớp “instanceof” trong kotlin?


95

Trong lớp Kotlin, tôi có tham số phương pháp như đối tượng (Xem Kotlin doc đây ) cho loại hình lớp T . Là đối tượng, tôi đang chuyển các lớp khác nhau khi tôi đang gọi phương thức. Trong Java, chúng ta có thể so sánh lớp bằng cách sử dụng instanceofđối tượng mà nó là lớp.

Vì vậy, tôi muốn kiểm tra và so sánh trong thời gian chạy nó là Class nào?

Làm cách nào để kiểm tra instanceoflớp trong kotlin?

Câu trả lời:


213

Sử dụng is.

if (myInstance is String) { ... }

hoặc ngược lại !is

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


15

Chúng ta có thể kiểm tra xem một đối tượng có tuân theo một kiểu nhất định trong thời gian chạy hay không bằng cách sử dụng istoán tử hoặc dạng phủ định của nó !is.

Thí dụ:

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

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

Một ví dụ khác trong trường hợp Đối tượng tùy chỉnh:

Hãy để, tôi có một objloại CustomObject.

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

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

4
Lưu ý một điều thú vị khác ở đây: bên trong khối của if, objđược tự động truyền sang String. Vì vậy, bạn có thể sử dụng các thuộc tính như lengthtrực tiếp, mà không cần truyền rõ ràng objvào Stringbên trong khối.
Jesper

7

Bạn có thể sử dụng 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

Hãy thử sử dụng từ khóa được gọi là is Tham chiếu trang chính thức

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

Đó là một điều tuyệt vời để đưa ra câu trả lời với tài liệu chính thức. Nhưng cách tốt hơn là thêm mã mẫu vào câu trả lời, sẽ rất hữu ích nếu liên kết đã chết. Cảm ơn vì câu trả lời.
pRaNaY

Các câu trả lời chỉ được liên kết không được ưu tiên.
Jayson Minard

0

Bạn có thể kiểm tra như thế này

 private var mActivity : Activity? = null

sau đó

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

    if (context is MainActivity){
        mActivity = context
    }

}

0

Bạn có thể đọc Tài liệu Kotlin tại đây https://kotlinlang.org/docs/reference/typecasts.html . Chúng ta có thể kiểm tra xem một đối tượng có tuân theo một kiểu nhất định trong thời gian chạy hay không bằng cách sử dụng istoán tử hoặc dạng phủ định của nó !is, ví dụ bằng cách sử dụng 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
}

sau đó trong chức năng chính, tôi cố gắng in và hiển thị nó trên thiết bị đầu cuối:

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

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

Đây là đầu ra

6
500

-1

Giải pháp khác: KOTLIN

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

if (fragment?.tag == "MyFragment")
{}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.