kotlinの「instanceof」クラスを確認するにはどうすればよいですか?


103

kotlinクラスでは、クラスタイプTのオブジェクトとしてメソッドパラメーターがあります(kotlinのドキュメントはこちらを参照)。オブジェクトとして、メソッドを呼び出すときにさまざまなクラスを渡します。Javaでは、オブジェクトを使用してクラスを比較することができます。instanceof

だから私はそれがどのクラスであるかを実行時にチェックして比較したいですか?

instanceofkotlinでクラスを確認するにはどうすればよいですか?

回答:


229

を使用しisます。

if (myInstance is String) { ... }

またはその逆 !is

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


15

is演算子またはその否定形式を使用して、実行時にオブジェクトが特定の型に準拠しているかどうかを確認できます!is

例:

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

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

カスタムオブジェクトの場合の別の例:

さて、私はobjタイプのを持っていCustomObjectます。

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

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

4
ここでもう1つの優れた点に注意してください。のブロック内でifobjは自動的ににキャストされStringます。したがって、ブロック内lengthに明示的にキャストobjする必要なしに、直接などのプロパティを使用できますString
ジェスパー2017年

7

あなたが使用することができます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 */ }
}

4

公式ページ参照というキーワードを使ってみてis ください

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

公式ドキュメントで答えるのは素晴らしいことです。ただし、回答にサンプルコードを追加することをお勧めします。リンクが切れている場合に役立ちます。答えてくれてありがとう。
pRaNaY 2017年

リンクのみの回答は推奨されません。
ジェイソンミナード2017年

1

Kotlinのドキュメントはhttps://kotlinlang.org/docs/reference/typecasts.htmlで読むことができますis演算子またはその否定形式を使用して、実行時にオブジェクトが特定の型に準拠しているかどうかを確認できます。!isたとえば、次を使用し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
}

次に、メイン関数で、端末に印刷して表示しようとします。

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

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

これが出力です

6
500

0

このように確認できます

 private var mActivity : Activity? = null

その後

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

    if (context is MainActivity){
        mActivity = context
    }

}

-2

その他の解決策:KOTLIN

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

if (fragment?.tag == "MyFragment")
{}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.