您的位置:首页 > Web前端

学习effective java-23泛型之在新代码中不要使用原生类型

2012-01-11 17:05 441 查看
该知识点是自己从书籍中学习的笔记。

从jdk1.5版本开始,java就引入了泛型。在没有泛型之前,从集合中取出的对象都必须经过转型,才能够达到使用。在jdk1.5之前,如果往集合中插入了不同类型的对象的话,那么在遍历的时候就可能引起运行时转型失败。

泛型定义:A class or interface whose declaration has one or more type parameters is a generic class or interface [JLS, 8.1.2, 9.1.2].就是说一个类或者接口拥有一或者多种类型参数的声明就是泛型类或者接口。

以下代码会编译出错:

public class Test1 {
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
unsafeAdd(strings, new String("42"));
String s = strings.get(0); // Compiler
}

static void unsafeAdd(List<String> list, Object o) {
list.add(o);
}
}//The method add(String) in the type List<String> is not applicable for the arguments (Object)

当不知道具体类型的时候,可以使用“?”号来表示通用的参数类型,如:

static int numElementsInCommon(Set<?> s1, Set<?> s2){

。。。}

总之,如果使用jdk1.5版本的话,那么就使用泛型。Set<Object>表示一个参数化类型,并且该Set里面只能够放Object类型的元素;Set<?>是一个通配符,表示Set中仅仅包含了一些未知类型的对象;Set是一个原生类型,没有指定泛型。前两者都是安全的,但是后者不是安全的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: