泛型,Java架构师所必备的重要技能之一,一张导图看明白

2022-01-09  本文已影响0人  程就人生

这篇文章主要说泛型,顺便也把数据类型整理一下,在做通讯协议的时候,一个不同类型的数字占几个字节,突然想不起来,也可以参考一下。

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

上一篇 下一篇

猜你喜欢

热点阅读