public class Test {
public static<T> void toTest(Collection<T> x,Collection<T> y){
for(T a:x){
y.add(a);
}
}
public static void main(String[] args) {
List<Object> ax = new ArrayList<>();
List<String> ay = new ArrayList<>();
toTest(ax, ay);//报错如下:
//The method toTest(Collection<T>, Collection<T>)
//in the type Zhaocuo is not applicable for the arguments (List<Object>, List<String>)
}
}
如上代码,为什么报这种错误?上面那个 T 是啥意思?static<T>这么写是啥意思?
求大神解释一下,谢谢!

解决方案 »

  1.   

    我也是菜鸟,说下我的想法吧,你调用toTest方法的时候,传入参数类型跟形参列表类型不一致吧?
      

  2.   

    toTest方法中范型都是T所以你一个用String,object不一样
      

  3.   

    public class TestListFX { public static <T1, T2 extends T1> void toTest(Collection<T1> x, Collection<T2> y) {
    for (T2 a : y) {
    x.add(a);
    }
    }

    public static void main(String[] args) {
    List<Object> ax = new ArrayList<>();
    List<String> ay = new ArrayList<>();
    ay.add("b");
    ay.add("c");
    toTest(ax, ay);
    System.out.println(ax);
    }
    }
      

  4.   

    一个Object,一个String,这俩不是一个类型当然会报泛型不匹配了
      

  5.   

    1)你如果不static<T>声明使用泛型T,那么在参数test(Collection<T> x, Collection<T> y)中的T就应该是一个已经存在的类;
    2)报错是因为String与Object不是同一类的实例