我有一种方法可以使用一些泛型。
@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的类。 现在有办法摆脱未经检验的演员吗?
答案 0 :(得分:1)
不,由于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) {