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

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

不,因为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) {