Java中泛型有哪些用法呢?

java问题王 Java每日一问 发布时间:2021-10-30 10:12:02 阅读数:8523 1
下文是笔者总结的java中的泛型用法大全,如下所示:

泛型常用

 
public interface list<E> {
 void add(E);
 Iterator<E> iterator();
}

泛型同子类

Child是Parent的子类
注意事项:
List<Child>
却不是List<Parent>的子类
所以List<Object> list = new ArrayList<String>()是错误的

List<String> ls = new ArrayList<String>(); //1
List<Object> lo = ls; //2
lo.add(new Object()); // 3
String s = ls.get(0); // 4将object转换为string将失败
此时应在泛型中使用通配符?:
void printCollection(Collection<?> c) {
 for (Object o: c) { // 1
 // do something
 }
} 
此处的?表示类型未知,但是任何对象均是Object,因此上例的1是正确的。但下例却是错误的:
void add(Collection<? extends MyClass> c) {
 c.add(new MyClass()); // wrong
} // ok
原因也很明确,? extends MyClass说明类型是MyClass的子类,但是却并不知道具体类型

泛型方法

<T> add(Collection<T> c, T t) {
 c.add(t);
}
编译器会进行相应的类型转换操作

泛型运行时的对比

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true

泛型数组--会导致类型不安全

List<String>[] lsa = new ArrayList<String>[10]; // error

Object o = lsa;
Object []oa = (Object[])o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
String s = lsa[1].get(0); // Runtime error
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202110/1615.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者