热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java中泛型的用法_Java中泛型的用法总结

本文实例总结了Java中泛型的用法。分享给大家供大家参考。具体如下:1基本使用publicinterfaceList{voidadd(E);Iteratoritera

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

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程序设计有所帮助。



推荐阅读
author-avatar
扬帆900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有