Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何针对多个类型进行检查_Android_Kotlin - Fatal编程技术网

Android 如何针对多个类型进行检查

Android 如何针对多个类型进行检查,android,kotlin,Android,Kotlin,有没有更好的方法来编写此代码?看起来Kotlin应该能给我一个更干净的版本,但我想不出来 override fun onAttachFragment(fragment: Fragment?) { super.onAttachFragment(fragment) if (fragment is Step1Fragment) { fragment.assignActivity(this) return

有没有更好的方法来编写此代码?看起来Kotlin应该能给我一个更干净的版本,但我想不出来

    override fun onAttachFragment(fragment: Fragment?) {
        super.onAttachFragment(fragment)

        if (fragment is Step1Fragment) {
            fragment.assignActivity(this)
            return
        }
        if (fragment is Step2Fragment) {
            fragment.assignActivity(this)
            return
        }
        if (fragment is Step3Fragment) {
            fragment.assignActivity(this)
            return
        }
        if (fragment is Step4Fragment) {
            fragment.assignActivity(this)
            return
        }
    }

虽然不太理想,但这里有点整洁:

when (fragment) {
  is Step1Fragment, is Step2Fragment, is Step3Fragment, is Step4Fragment -> {
    fragment.assignActivity(this)
    return
  }
}

步骤1:创建接口

interface ActivityAssignable {
    fun assignActivity(activity: Activity)
}
class Step1Fragment: Fragment(), ActivityAssignable {
    override fun assignActivity(activity: Activity) { ... }
}

class Step2Fragment: Fragment(), ActivityAssignable {
    override fun assignActivity(activity: Activity) { ... }
}
第2步:让你的片段实现这个接口

interface ActivityAssignable {
    fun assignActivity(activity: Activity)
}
class Step1Fragment: Fragment(), ActivityAssignable {
    override fun assignActivity(activity: Activity) { ... }
}

class Step2Fragment: Fragment(), ActivityAssignable {
    override fun assignActivity(activity: Activity) { ... }
}
步骤3:在if语句中使用该接口

if (fragment is ActivityAssignable) {
    fragment.assignActivity(this)
}

第四步:盈利

您可以创建一个由您希望使用的片段实现的接口,然后检查它是否是该接口的实例。我会尝试一下。您可以解释一下
assignActivity()
?这似乎不起作用的原因。我在一个抽象的超类中创建了assignActivity fun…如果您只将片段与一种类型进行比较,Kotlin会默默地将片段转换为适当的类型。如果没有这个强制转换,它将找不到assignActivity函数,难道你不能与抽象类进行比较吗?还是人工铸造?