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

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

作者: 程就人生 | 来源:发表于2022-01-09 10:32 被阅读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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/relucrtx.html