我正在检查权限,我可以使用Fragment或and Activity来实现。他们没有共同的祖先,所以我让它接受了Any。我想要一种限制它只接受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))
}
})
}
}
答案 0 :(得分:1)
不可能将函数参数限制为仅两种类型,但是您仍然可以解决方法重载的代码重复问题。
fun requestLocationPermission(fragment: Fragment) {
requestLocationPermission(RxPermissions(fragment), fragment.getActivity())
}
fun requestLocationPermission(activity: FragmentActivity) {
requestLocationPermission(RxPermissions(activity), activity)
}
private fun requestLocationPermission(rx: RxPermissions, context: Context) {
rx.request(android.Manifest.permission.ACCESS_FINE_LOCATION)
.subscribeBy(onNext = { granted ->
if (!granted) Toast.make(context,
location_message_locationPermissionRequired,
Toast.LENGTH_SHORT).show()
})
}