• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:理解泛型

java 搞代码 3年前 (2022-02-19) 17次浏览 已收录 0个评论
  • 为什么要用泛型?

    • 别让猫别站在狗队里
    • Demo

            // 下列的增加办法齐全没问题
            list.add("one");
            list.add(1);
           ​
            // 取的时候, 如果你小心的,也没问题
            // 须要强转, 外部是<strong style="color:transparent">来源gaodai#ma#com搞@@代~&码网</strong>以Object援用来寄存
            String s = (String) list.get(0);
            int    i = (int) list.get(1);
           ​
            // 然而如果, 不小心在获取时 类型判断出错的话
            for (int index = 0; index < list.size(); index++) {
            String str = (String) list.get(index);
            // index = 1时, 抛出java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
            }
  • 泛型的分类

    • 泛型类

      •   private T obj;
          public Holder(T t) {
          obj = t;
          }
          public void put(T t) {
          obj = t;
          }
          public T get() {
          return obj;
          }
         }
    • 泛型接口
    • 泛型办法

      •  public class Normal {
          // 成员泛型办法
          public <E> String getString(E e) {
          return e.toString();
          }
          // 动态泛型办法
          public static <V> void printString(V v) {
          System.out.println(v.toString());
          }
         }
         // 泛型类中的泛型办法
         public class Generics<T> {
          // 成员泛型办法
          public <E> String getString(E e) {
          return e.toString();
          }
          // 动态泛型办法
          public static <V> void printString(V v) {
          System.out.println(v.toString());
          }
         }
  • 泛型的做用

    • 可能对类型进行限定
    • 在编译期对类型进行查看,编译时报错
    • 对于获取明确的限定类型,无需进行强制类型转化
    • 具备良好的可读性和安全性
  • 通配符

    • 协变和逆变

      •  f(⋅)是逆变(contravariant)的,当A≤B时有f(B)≤f(A)成立;
         f(⋅)是协变(covariant)的,当A≤B时有f(A)≤f(B)成立;
    • 上界通配符 —— 协变

      • <? extends>
    • 下界通配符 —— 逆变

      • <? super>
  • 留神点

    • 泛型类中静态方法不能应用泛型参数
    • 泛型接口中不能应用类型参数作为成员变量
  • 实现原理即类型擦除

    • 泛型只是给编译器用来查看类型的
  • 参考

    • java泛型深度解读
    • Java中的逆变与协变
    • java泛型 通配符详解及实际
    • Java 泛型 T,E,K,V,?,傻傻分不清?

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:理解泛型

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址