试图摆脱未经检查的投射警告

时间:2015-10-08 09:38:22

标签: java android generics type-erasure

我有一种方法可以使用一些泛型。

    @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的类。 现在有办法摆脱未经检验的演员吗?

1 个答案:

答案 0 :(得分:1)

不,由于Param1Param2是两个独立的类型参数,因此无法保证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) {