试图摆脱未经检查的投射警告
Trying to get rid of unchecked cast warning
我有一个使用一些泛型的方法。
@SuppressWarnings("unchecked")
public static <Param1 extends Fragment, Param2 extends Context, Result> Optional<Result> useContextFromFragment(
final WeakReference<Param1> reference,
final UseContext<Result, Param2> task) {
final Param1 fragment;
if (reference == null || (fragment = reference.get()) == null)
return Optional.absent();
final Activity activity = fragment.getActivity();
if (activity == null || activity.isFinishing())
return Optional.absent();
return Optional.fromNullable(task.work((Param2) activity));
}
Activity 是扩展 Context 的 class。
现在有办法摆脱未经检查的演员表吗?
不,因为Param1
和Param2
是两个独立的类型参数,不能保证WeakReference<Param1>.get().getActivity()
实际上是Param2
类型。
你是凭信心接受的。
无关,但正如@biziclop 评论的那样,约定是类型参数是单个大写字母,或者可能是两个。
你的方法应该是:
public static <F extends Fragment, C extends Context, R> Optional<R> useContextFromFragment(
final WeakReference<F> reference,
final UseContext<R, C> task) {
我有一个使用一些泛型的方法。
@SuppressWarnings("unchecked")
public static <Param1 extends Fragment, Param2 extends Context, Result> Optional<Result> useContextFromFragment(
final WeakReference<Param1> reference,
final UseContext<Result, Param2> task) {
final Param1 fragment;
if (reference == null || (fragment = reference.get()) == null)
return Optional.absent();
final Activity activity = fragment.getActivity();
if (activity == null || activity.isFinishing())
return Optional.absent();
return Optional.fromNullable(task.work((Param2) activity));
}
Activity 是扩展 Context 的 class。 现在有办法摆脱未经检查的演员表吗?
不,因为Param1
和Param2
是两个独立的类型参数,不能保证WeakReference<Param1>.get().getActivity()
实际上是Param2
类型。
你是凭信心接受的。
无关,但正如@biziclop 评论的那样,约定是类型参数是单个大写字母,或者可能是两个。
你的方法应该是:
public static <F extends Fragment, C extends Context, R> Optional<R> useContextFromFragment(
final WeakReference<F> reference,
final UseContext<R, C> task) {