c语言sscanf函数的用法是什么
284
2023-02-12
Java中List<T>和List<?>的区别详解
一、简介
另外除了>,还有 extends T>上界通配符和 super T>下界通配符。 extends T> 表示传入数据值需要是T类型或T的子类, suprt T>表示传入数据值需要是T类型或T的超类。
一般来说,>主要用于变量上,
建议采用的顺序是 List
二、代码实例
List>是只读类型的,不能进行增加、修改操作。
>的各种坑
但 List>这个写法非常坑。因为,这时候通配符会捕获具体的String类型,但编译器不叫它String,而是起个临时的代号,比如”CAP#1“。所以以后再也不能往list里存任何元素,包括String。唯一能存的就是null。
List> list = new ArrayList
list.add(http://"hello"); //ERROR
list.add(111); //ERROR
//argument mismatch; String cannot be converted to CAP#1
//argument mismatch; int cannot be converhttp://ted to CAP#1
另外如果拿List>做参数,也会有奇妙的事情发生。还是刚才Box
class Box
private List
public List
public void set(List
//把item取出来,再放回去
public void getSet(Box> box){box.set(box.get());} //ERROR
}
新的getSet()方法,只是把item先用get()方法读出来,然后再用set()方法存回去。按理说不可能有问题。实际运行却会报错。
error: incompatible types: Object cannot be converted to CAP#1
原因和前面一样,通配符box>.set()的参数类型被编译器捕获,命名为CAP#1,和box>.get()返回的Object对象无法匹配。
解决方法,是要给getSet()方法写一个 辅助函数,具体原理可以去查《Java核心技术-卷1》,泛型这章,或者《Java编程思想》。都有讲。
http://
class Box
private List
public List
public void set(List
//helper()函数辅助getSet()方法存取元素
public void getSet(Box> box){helper(box);}
public
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~