问题在代码中:
import java.util.*;
class Test1{}
class aa extends Test1{}
class bb extends Test1{}
class cc extends Test1{}
class dd extends aa{}
class ee extends aa{}
class ff extends aa{}public class Test{
public static void main(String[] args){
                /**问题一:**/
                //这句能编译
Collection<Test1> test1 = Arrays.asList(new aa(),new bb(),new dd(),new ee());
                //为什么这句就不能编译??
                Collection<Test1> test1 = Arrays.asList(new dd(),new ee());
                /**问题二:**/
                List<Test1> test1 = new ArrayList<Test1>(Arrays.asList(new aa(),new bb()));
                List<Test1> test1 = new ArrayList<Test1>(Arrays.asList(new dd(),new ee()));
                //为什么这句就不能编译??
                List<Test1> test1 = new ArrayList(Arrays.asList(new aa(),new bb()));
}
}

解决方案 »

  1.   

    Arrays.asList(new dd(),new ee())
    返回后类型变成List<aa>
    无法转换成Collection<Test1>
      

  2.   

    第二个问题在我这里可以编译
    我是jdk1.6
    不过我想既然你要对list使用范型进行类型控制
    那么最好都加上,否则类型控制起什么作用呢?
      

  3.   

        Collection<Test1> test1 = Arrays.asList(new dd(),new ee());
    就这句有问题,问题楼上已经指出.
    List<Test1> test1 = new ArrayList(Arrays.asList(new aa(),new bb()));
    这句没问题.是不是你多个test1一起编译的?
      

  4.   

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.List;class Test1 {}
    class aa extends Test1 {}
    class bb extends Test1 {}
    class cc extends Test1 {}
    class dd extends aa {}
    class ee extends aa {}
    class ff extends aa {}public class TestLim0528 { public static void main(String[] args) {
    /** 问题一: **/
    //这句能编译
    Collection<Test1> test1 = Arrays.asList(new aa(), new bb(), new dd(), new ee());
    //为什么这句就不能编译??
    //Collection<Test1> test1 = Arrays.asList(new dd(),new ee());
    //asList 是 Arrays 类的泛型方法,得这样用:
    Collection<Test1> test2 = Arrays.<Test1>asList(new dd(), new ee());
    /** 问题二: **/
    List<Test1> test3 = new ArrayList<Test1>(Arrays.asList(new aa(),new bb()));
    List<Test1> test4 = new ArrayList<Test1>(Arrays.asList(new dd(),new ee()));
    //为什么这句就不能编译??
    //List<Test1> test1 = new ArrayList(Arrays.asList(new aa(),new bb()));
    //因为你 test1 声明成了泛型类型的对象变量,修改如下:
    List<Test1> test5 = new ArrayList<Test1>(Arrays.asList(new aa(), new bb()));
    //更严格应该写成:
    List<Test1> test6 = new ArrayList<Test1>(Arrays.<Test1>asList(new aa(), new bb()));
    }}
      

  5.   

    补充一下,我都是一句句编译的,用得是JDK1.5版本