永发信息网

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

答案:6  悬赏:0  手机版
解决时间 2021-06-03 08:42

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

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

最佳答案

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


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


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));
}

全部回答

你的两个类型是相同的吗

加个判断 符合条件就添加

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

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

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

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)); } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
键盘上倒了水,可是有些键按起来硬硬的,怎么
赣州有什么地方好玩?
QQ飞行岛为什么不对新用户开放啊?
当一个人特无奈时,会想到什么???
如何调整开机时间
在一个人爱上另一个人之后 是不是会彻底忘记
我急需巨好看巨美型的动漫 日本的最好
qq密码丢失怎么办
总长六米以下的江淮平板货车.双排带空调的.现
使命召唤5 ERROR
DNF赚钱怎么快
搜索《我会很诚实》的空间背景音链接
淘米水的用途
四个火念什么?
勐海县图书馆在哪里?怎么走?
推荐资讯
马天宇好听的歌
在周星驰电影 师兄撞鬼 中,那个演阿玉爸爸的
几岁后掉牙就不会长了
魔法少女奈叶还有续集吗
刘德华还能红多久?
游戏是在维修吗?
我下载了一个视频怎么在麦迪MP5上放不了啊?
科比能蝉联本赛季的三项MVP吗?
吃什么水果对身体有好处?
如何拒绝向自己表白的善良男生?
公安县荆州薇薇新娘婚纱摄影公主馆(治安路)地
把人给我分一下类.谢谢!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?