Android 如何针对多个类型进行检查
有没有更好的方法来编写此代码?看起来Kotlin应该能给我一个更干净的版本,但我想不出来Android 如何针对多个类型进行检查,android,kotlin,Android,Kotlin,有没有更好的方法来编写此代码?看起来Kotlin应该能给我一个更干净的版本,但我想不出来 override fun onAttachFragment(fragment: Fragment?) { super.onAttachFragment(fragment) if (fragment is Step1Fragment) { fragment.assignActivity(this) return
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函数,难道你不能与抽象类进行比较吗?还是人工铸造?