这可能是我第 n 次对泛型中的通配符感到困惑,所以我寻求您的帮助。请看下面的代码。
public class MainClass {
public static void main(String[] args) {
ArrayList<Thread> l = new ArrayList<>();
l.add(new Thread());
l.add(new Thread());
m1(l);
}
static <T extends Runnable> Collection<T> m1(ArrayList<T> l) {
ArrayList<Thread> r = new ArrayList<>();
return r;
}
}
当我调用 m1 时,我可以通过ArrayList<Runnable>或它的任何实现类并且它可以工作。到目前为止一切都很好。现在在方法内m1,我无法返回ArrayList<Thread>或者ArrayList< Runnable>因为返回类型是Collection<T>. 我的困惑是,受其实现类中T的一个或任何一个限制,这就是为什么我在调用 m1 时Runnable无法发送。ArrayList<String>如果编译器足够聪明地知道这一点,为什么它不知道这ArrayList<Thread>是该方法的有效返回参数m1?
有人可以帮忙吗?
谢谢!