Java基础 -- 泛型
- 1. Introduction
- 1.1 好处
- 1.2 常用泛型
- 2. User Guide
- 2.1 泛型类
- 2.2 泛型方法
- 2.3 泛型接口
- 3. 限定泛型范围
- 4. Awakening
1. Introduction
1.1 好处
- 代码复用,多种数据类型执行相同的代码
- 在编译期间可以检查类型是否安全,报警ClassCastException,类型转无法转换,同时所有强制性类型转换都是自动和隐式进行的,提高了代码的安全性和重用性
- 提高代码的可读性
1.2 常用泛型
泛型标记 | 说明 |
---|---|
T(Type) | 表示java的类型,包括基本的类和开发者自定义的类 ,比如T Object |
E(Element) | 表示在集合中存放的元素,是在集合中使用的 ,比如List< E > list |
K(Key) | 表示键,在存储键值对的数据结构中使用,比如map中的key |
V(Value) | 表示值,和K对应 |
N(Number) | 表示各种数值类型 |
? | 表示不确定的java类型 |
2. User Guide
2.1 泛型类
- 注意:泛型类在初始化时就把类型确定了
public class EntityTool<T> {
private T entity;
public T getEntity() {
return entity;
}
public void setEntity(T entity) {
this.entity = entity;
}
public static void main(String[] args) {
// 创建对象并指定元素类型
EntityTool<String> stringTool = new EntityTool<>();
stringTool.setEntity("拔光头发的程序员");
String s = stringTool.getEntity();
System.out.println(s);
// 创建对象并指定元素类型
EntityTool<Integer> integerTool = new EntityTool<>();
// 此时,如果这里传入的还是 String 类型,那就会在编译期报错
integerTool.setEntity(10);
int i = integerTool.getEntity();
System.out.println(i);
}
}
2.2 泛型方法
- 注意:泛型方法在调用时才会确定最终类型
public class Show {
public static <T> T show(T t) {
System.out.println(t);
return t;
}
public static void main(String[] args) {
// 返回值不用强转,传进去是什么,返回就是什么
String s = show("一个优秀的程序员");
int num1 = show(10);
System.out.println(s);
System.out.println(num1);
}
}
2.3 泛型接口
- 注意:泛型类在初始化时就把类型确定了
public interface MdmService<T> {
void processRawData();
void addBathRawData(List<T> list);
Boolean updateBathRawData(List<T> list);
}
@Transactional
@Service
public class CrmServiceImpl implements MdmService<CustomMasterTable> {
Logger logger = LoggerFactory.getLogger(CrmServiceImpl.class);
@Override
public void processRawData() {
。。。。
}
@Override
public void addBathRawData(List<CustomMasterTable> list) {
。。。。
}
@Override
public Boolean updateBathRawData(List<CustomMasterTable> list) {
。。。。
}
}
3. 限定泛型范围
<? extends Parent> 指定了泛型类型的上限
<? super Child> 指定了泛型类型的下届
<?> 指定了没有限制的泛型类型
4. Awakening
在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。