JAVA一个泛型数组List<?> 怎么复制某几行到另外一个List<?>?

2024-11-20 20:42:16
推荐回答(5个)
回答1:

你明白一个单纯的“?”是什么意思吗?它代表的是任意类型。既可以是有继承关系的,也可以是八竿子都打不到的。比如你想写的大约是这样的class gen{pulbic void listMove(List list1 , List list2,Int i){list2.add(list1.get(i));}}但是请注意这里?号代表的是任意一个Number的子类,这意味着你如果传入像list1 是List而list2是List这样的同级泛型参数,就像这样来调用这个函数list1 = new List();list2 = new List();listMove(list1, list2, i);这个函数的目的显然是把list1 的第i个元素放入list2中,但是请注意list1和list2是不相同,也没有继承关系的同级别类型,你正试图把一个Long 类型放入一个只能够放置Double类型的List 中,如果java允许你这样来操作元素,那不是和泛型本身希望提高类型安全的目的背道而驰了吗?这个问题里你需要注意的是,想要传递的类型参数是有关系的,lIst1的?号应该是list2的本身或者子类才对,你应该这样定义你的方法,你需要对这两个?号有一定的约束这样来定义public < T extends Object>/*这里可以是你自己对类型的约束,我都是约束成了Object的*/void listMove(List list1//有条件的约束,?应该是T的子类, List list2 ,int i){
list2.add(list1.get(i));
}

回答2:

可以放入,但条件是List1的?类型必须与List2中?类型相同或者可以显示转化成List2中?的类型当然最好不要出现数组越界的异常,所以你在取出来的时候最好判断一下,各自的非空情况

回答3:

<>内是一种约束,比如那么里面放的对象必须要是int类型的,就像数据库里面声明了数据类型一样的,只不过这里声明的是被操作的对象而已。如果放的对象不是你<>里面的类型,编译器会自动提示你错误的,这也是jdk6.0的另外一个特性,这样会更安全(约束),......

回答4:

加个判断 符合条件就添加

回答5:

public void addList(){
List list = new ArrayList();
List list2 = new ArrayList();
list.add(1);
list.add(2);
for(int i=0; i list2.add(list.get(i));
}
}