这篇文章主要说泛型,顺便也把数据类型整理一下,在做通讯协议的时候,一个不同类型的数字占几个字节,突然想不起来,也可以参考一下。
Java的数据类型,如下图所示,基本数据类型、封装类型、引用类型、泛型,泛型是Java5之后新增的技术之一。
Java数据类型整理 数值型整理封装类型,是对基本数据类型的封装,比如Byte:
//封装操作
Byte aa = Byte.valueOf("1");
//解封操作
byte bb = aa.byteValue();
封装类型图解
接下来看泛型,它的本质、实现过程、目的、使用范围、特点如下图所示:
泛型图解
泛型中的标记符和使用如下图所示:
标记符整理
T(Type) Java类型的使用示例:
//T 泛型类
public class ClassDemo<T> {
private T name;//类型是未知的
public ClassDemo(T name) {
this.name = name;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}
//T 泛型接口
interface A<T>{
void display(T value);
T getValue(T v);
}
//用法1,未对泛型接口指定具体类型
public class Person implements A{
@Override
public void display(Object obj) {
System.out.println();
}
@Override
public Object getValue(Object v) {
return null;
}
}
//用法2,为泛型接口指定具体类型
public class Person implements A<String>{
@Override
public void display(String value) {
}
@Override
public String getValue(String v) {
return null;
}
}
//T 泛型方法1,可以传任意类型的数组
public <T> void forArrGenric(T[] arr) {
for(int i=0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//T 泛型方法2
public <T> void demo1(T name){
System.out.println(name);
}
//T 泛型方法3
public <T> T demo2(T t){
return t;
}
K(Key)键,V(Value)值 天生就是一对,看看Map的源码是怎么使用的:
public interface Map<K,V> {
// 获取value
V get(Object key);
// 通过key填充value
V put(K key, V value);
// 通过key删除对应的value
V remove(Object key);
// ....更多源码省略,更自行查看
}
E(Element),看看List集合是怎么使用的:
public interface List<E> extends Collection<E> {
// 遍历集合中的每一个元素
Iterator<E> iterator();
// 添加全部的原生
boolean addAll(Collection<? extends E> c);
// 移除某个元素
boolean removeAll(Collection<?> c);
// 通过索引获取某个元素
E get(int index);
// 在指定位置添加元素
E set(int index, E element);
// ....更多源码省略,更自行查看
}
Number 和 ?通配符的结合使用:
public interface List<E> extends Collection<E> {
// 遍历集合中的每一个元素
Iterator<E> iterator();
// 添加全部的原生
boolean addAll(Collection<? extends E> c);
// 移除某个元素
boolean removeAll(Collection<?> c);
// 通过索引获取某个元素
E get(int index);
// 在指定位置添加元素
E set(int index, E element);
// ....更多源码省略,更自行查看
}
最后总结:
经过一番整理,对泛型的了解和使用又加深了一步,思维导图加上代码,搞不清楚的时候过来瞅一眼,使用起来妥妥的;熟练使用泛型技术,又多了一项作为架构师的利器。
参考文档:
https://www.runoob.com/java/java-generics.html
https://zhuanlan.zhihu.com/p/154595559
https://www.cnblogs.com/fwnboke/p/8529670.html
网友评论