【发布时间】:2019-03-14 20:09:00
【问题描述】:
我正在检查权限,我可以使用 Fragment 或 Activity 来检查。他们没有共同的祖先,所以我让它接受任何。我想要一种方法来限制它只接受 Activity 或 Fragment 对象。有没有办法做一些可以采用 Class1 或 Class2 的泛型?
fun requestLocationPermission(fragmentOrActivity: Any) {
if (fragmentOrActivity is Fragment) {
RxPermissions(fragmentOrActivity)
.request(android.Manifest.permission.ACCESS_FINE_LOCATION)
.subscribeBy(
onNext = { granted ->
if (!granted) {
fragmentOrActivity.toast(fragmentOrActivity.getString(location_message_locationPermissionRequired))
}
})
} else if (fragmentOrActivity is FragmentActivity) {
RxPermissions(fragmentOrActivity)
.request(android.Manifest.permission.ACCESS_FINE_LOCATION)
.subscribeBy(
onNext = { granted ->
if (!granted) {
fragmentOrActivity.toast(fragmentOrActivity.getString(location_message_locationPermissionRequired))
}
})
}
}
【问题讨论】:
-
为什么不重载函数并让一个版本接受 Activity 而另一个版本接受 Fragment?
-
您需要一个
Interface,您的Fragment和FragmentActivity都将实施。然后你可以在你的函数参数中使用Interface类型。 -
@Egor 不能解决代码重复问题。
标签: generics inheritance kotlin multiple-inheritance