学习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是一个原生类型,没有指定泛型。前两者都是安全的,但是后者不是安全的。
从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是一个原生类型,没有指定泛型。前两者都是安全的,但是后者不是安全的。
相关文章推荐
- Effective Java 第 23 条: 请不要在新代码中使用原生态类型
- effective java(23) 之请不要在新代码中使用原生态类型
- 《Effective Java》泛型--请不要在新代码中使用原生态类型
- 《Effective Java 第二版》学习笔记,第23条:请不要在新代码中使用原生态类型
- (23):请不要在新代码中使用原生态类型
- 泛型第23条:请不要在新代码中使用原生态类型
- Effective Java学习--第23条:不要使用原生态类型
- 23:请不要在新代码中使用原生态类型
- 泛型第23条:请不要在新代码中使用原生态类型
- 第23条 泛型——请不要在新代码中使用原生态类型
- 《Effective java》读书记录-第23条-请不要在新代码中使用原生态类型
- Effective Java 3rd 条目26 不要使用原生类型
- 第二十三条:不要在新代码中使用原生类型
- EffectiveJava——请不要在代码中使用原生态类型
- 请不要在新代码中使用原生态类型。
- 不要重复DAO!使用Hibernate 和Spring AOP 构建泛型类型安全的DAO
- 第二十三条:请不要在新代码中使用原生态类型
- 第23条:请不要在新代码中使用原生态类型
- 分享学习scala时看到scala仅仅使用ifthenelse构造出boolean类型的精妙代码
- java学习_3.原生数据类型使用陷阱