永发信息网

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

答案:6  悬赏:0  手机版
解决时间 2021-06-03 08:42
  • 提问者网友:风月客
  • 2021-06-02 14:26

List<?> list1和List<?> list2,我希望通过索引把list1的某几个索引值放到list2,代码我是这样写的:list2.add(list1.get(i));

但是报语法错误,正确的语法应该怎么写呢?

最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-06-02 16:00

你明白一个单纯的“?”是什么意思吗?它代表的是任意类型。既可以是有继承关系的,也可以是八竿子都打不到的。


比如你想写的大约是这样的


class gen{


pulbic <? extends Number>void listMove(List <?>list1 , List<?> list2,Int i){


list2.add(list1.get(i));


}


}


但是请注意这里?号代表的是任意一个Number的子类,这意味着你如果传入像list1 是List<Long>而list2是List<Double>这样的同级泛型参数,就像这样来调用这个函数


list1 = new List<Long >();


list2 = new List<Double>();


listMove(list1, list2, i);


这个函数的目的显然是把list1 的第i个元素放入list2中,但是请注意list1和list2是不相同,也没有继承关系的同级别类型,你正试图把一个Long 类型放入一个只能够放置Double类型的List 中,如果java允许你这样来操作元素,那不是和泛型本身希望提高类型安全的目的背道而驰了吗?


这个问题里你需要注意的是,想要传递的类型参数是有关系的,lIst1的?号应该是list2的本身或者子类才对,你应该这样定义你的方法,你需要对这两个?号有一定的约束


这样来定义


public < T extends Object>


void listMove(List<? extends T> list1//有条件的约束,?应该是T的子类


, List<T> list2 ,int i){
list2.add(list1.get(i));
}

全部回答
  • 1楼网友:三千妖杀
  • 2021-06-02 20:59

你的两个类型是相同的吗

  • 2楼网友:狂恋
  • 2021-06-02 19:32

加个判断 符合条件就添加

  • 3楼网友:独钓一江月
  • 2021-06-02 18:55
<>内是一种约束,比如<int>那么里面放的对象必须要是int类型的,就像数据库里面声明了数据类型一样的,只不过这里声明的是被操作的对象而已。如果放的对象不是你<>里面的类型,编译器会自动提示你错误的,这也是jdk6.0的另外一个特性,这样会更安全(约束),......
  • 4楼网友:患得患失的劫
  • 2021-06-02 17:51

可以放入,但条件是List1<?>的?类型必须与List2<?>中?类型相同或者可以显示转化成List2中?的类型

当然最好不要出现数组越界的异常,所以你在取出来的时候最好判断一下,各自的非空情况

  • 5楼网友:老鼠爱大米
  • 2021-06-02 16:18
public void addList(){ List list = new ArrayList(); List list2 = new ArrayList(); list.add(1); list.add(2); for(int i=0; i<list.size(); i++){ list2.add(list.get(i)); } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯