23
条:不要在新代码中使用原生态类型
Java
1.5
加入了泛型,即类型参数,在
1.5
之前可以将任意对象放入集合中,所以在从集合中取出来的时候都需要做强制类型转换,这就有可能导致
ClassCastException
。
1.5
加入泛型后,就得到了在编译期间检查的好处了。虽然在运行时泛型会做擦除,泛型的目的应该还是减少
ClassCastException
和一些表述上的优势。比如
List<Date>
就是存放
Date
的一个
list
,而在
1.5
以前就是一个
List
,可以放任何东西,只能程序员自己控制。
所以能不使用
rawtype
就别使用,有些地方你可能不知道该使用什么类型参数,这时应该使用通配符
<?>.
但是在类文字中必须使用
Raw
type,
比如
List.class,String.class
而
List<String>.class
是不合法的。
第
24
条:消除非受检警告
尽量消除非受检警告,没有非受检警告意味着不会出现
classCastException
。如果无法消除,但是又确定类型安全的时候可以用
SuppressWarning(“unchecked”)
注解来消除,当然在该用的地方用这个注解。
第
25
条:列表优先于数组
由于数组是协变的,如下
:
Object[]
ob = new Long[1];
ob[0]
= "abc";
这样在编译期间不会有任何错误,但是在运行时马上就会抛出
ArrayStoreException
。
而如果你试图将一个
String
类型放入
List<Long>
中编译将不会通过。由于数组是协变的,所以数组是不能够泛型化的。
总的来说就是除非必要,都应该优先考虑用列表而不是数组。
第
26
条
:
优先考虑泛型
尽可能的将一些可能持有对象的类编写为泛型,避免在使用这些类的时候做类型转换。
第
27
条:优先考虑泛型方法
应该尽量确保调用方法时不需要做类型转换,所以尽量将方法泛型化。
第
28
条
:
利用有限制通配符来提升
API
的灵活性
有限制通配符是指
? extends
E,? super E.
第一个是指任何
E
的子类,第二个指任何
E
的父类。什么时候用哪个呢,有个助记符可以让你记住
PECS – producer extends consumer super.
利用这条原则来编写有限制的通配符。所有的
comparator
和
comparable
都是
consumer
,在有
Comparable<T>
时都可以考虑
Comparable<? super T>.
第
29
条:优先考虑异构安全的类型容器
jdk
里面的容器在有类型参数的情况下指允许放入参数类型的实例,但你可以编写一个以
Class<T>
为
key
,
value
为该
class
对应实例的类来存放不同类型的实例,这个就是异构。
如下示例代码:
package com.andyjiang.generic;
public interface Favorites {
public <T> void putFavorite(Class<T> clazz,T instance);
public <T> T getFavorte(Class<T> clazz);
}
package com.andyjiang.generic.impl;
import java.util.HashMap;
import java.util.Map;
import com.andyjiang.generic.Favorites;
public class FavoritesImpl implements Favorites {
private Map<Class<?>,Object> favoriteMap = new HashMap<Class<?>,Object>();
public <T> void putFavorite(Class<T> clazz, T instance) {
this.favoriteMap.put(clazz, instance);
}
public <T> T getFavorte(Class<T> clazz) {
// TODO Auto-generated method stub
return clazz.cast(this.favoriteMap.get(clazz));
}
}
分享到:
相关推荐
Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力...
、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 枚举类 2020-4-10 java 注解...
个人制作且上课使用的课件,希望对大家初步了解泛型相关内容有一定的帮助。个人制作且上课使用的课件,希望对大家初步了解泛型相关内容有一定的帮助。
全面总结Java泛型--实例
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
SSH笔记-泛型依赖注入,当继承类完毕之后,根据泛型依赖注入的特性,被继承类会参照继承类所引用了的其他的引用关系自动建立对应引用关系,这就是泛型依赖注入
JAVA设计模式--程序设计--反射--注解--泛型
补充知识:泛型1---马克-to-win java视频的详细描述与介绍
java --泛型编程 课件 同时可结合《java 程序员教程》这本书
03-Java集合-泛型面试题(24题)-新增
补充知识2 ---马克-to-win java视频泛型的详细描述与介绍
Java中的泛型 JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0。这说明Java已经有大幅度的变化。本文将讲解JDK5.0支持的新功能-----Java的泛型. 1、Java泛型 其实Java的泛型就是创建一个用类型...
Java Generics and Collections 英文版,详细描述java 泛型技术
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
java泛型使用的视频,讲的不错,可以学习学习
基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
JAVA泛型笔记.pdf
java 泛型接口示例 java 泛型接口示例 java 泛型接口示例