Java中泛型的用法总结

网友投稿 189 2023-08-01


Java中泛型的用法总结

本文实例总结了java中泛型的用法。分享给大家供大家参考。具体如下:http://

1 基本使用

public interface List {

void add(E);

Iterator iterator();

}

2 泛型与子类

Child是Parent的子类,List却不是List的子类。

因此:List list = new ArrayList()是错误的。

如果上面是正确的,那么:

List ls = new ArrayList(); //1

List lo = ls; //2

lo.add(new Object()); // 3

String s = ls.get(0); // 4,将object转换为string将失败。

3 wildcards

因为2的原因,下面的实现用于统配集合的输出是不行的

void printCollection(Collection c) {

for (Object o: c) {

// do something

}

}

因此,需要通配符?:

void printCollection(Collection> c) {

for (Object o: c) { // 1

// do something

}

} // ok

此处的?表示类型未知,但是任何对象均是Object,因此上例的1是正确的。但下例却是错误的:

void add(Collection extends MyClass> c) {

c.add(new MyClass()); // wrong

} // ok

原因也很明确,? extends MyClass说明类型是MyClass的子类,但是却并不知道具体类型

4. 泛型方法

上例可以实现为:

add(Collection c, T t) {

c.add(t);

}

编译器在保证语义的前提,会帮忙做类型的转换工作。

5. 泛型运行时的对比

List l1 = new ArrayList();

List l2 = new ArrayList();

System.out.println(l1.getClass() == l2.getClass()); // true

因为泛型类运行时时一样的。

6 泛型数组(可能导致类型不安全)

复制代码 代码如下:

List[] lsa = new ArrayList[10]; // error

如果可以的话,可能导致类型不安全。如:

Object o = lsa;

Object []oa = (Object[])o;

List li = new ArrayList();

li.add(new Integer(3));

oa[1] = li;

String s = lsa[1].get(0); // runtime error

希望本文所述对大家的java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中getResourceAsStream用法分析
下一篇:Java中接口和抽象类的区别与相同之处
相关文章

 发表评论

暂时没有评论,来抢沙发吧~