zoukankan      html  css  js  c++  java
  • Java泛型学习笔记

    1. 当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来表示, 注意: 这里虽然用的是extends关键字, 却不仅限于继承了父类E的子类, 也可以代指显现了接口E的类. 仍以Box类为例:

     1 public class Box<T> {
     2 
     3     private T obj;
     4     
     5     public Box() {}
     6 
     7     public T getObj() {
     8         return obj;
     9     }
    10 
    11     public void setObj(T obj) {
    12         this.obj = obj;
    13     }
    14 
    15     public Box(T obj) {
    16         super();
    17         this.obj = obj;
    18     }
    19 
    20     public <Q extends Number> void inspect(Q q) {
    21         System.out.println(obj.getClass().getName());
    22         System.out.println(q.getClass().getName());
    23     }
    24 }

    我加入了public <Q extends Number> void inspect(Q q){...}方法, 该方法的泛型只能是Number的子类.

    1 Box<String> b = new Box<>();
    2 b.setObj("Hello");
    3 b.inspect(12);
    4 b.inspect(1.5);
    5 // b.inspect(true); // 编译出错

    2. 界类型参数除了规定泛型的范围之外, 还允许我们调用边界类型所拥有的方法(因为所有类型参数都是边界类型或边界类型的子类), 如:

     1 public class NatureNumber<T extends Integer> {
     2 
     3     private T t;
     4     
     5     public Box() {}
     6 
     7     public NatureNumber(T t) {
     8         this.t = t;
     9     }
    10 
    11     public boolean isEven() {
    12         return t.intValue() % 2 == 0;
    13     }
    14     
    15     // ...
    16 }

    3. 多边界:

    上面的例子展示的是单边界的泛型, 我们还可以使用多边界泛型:
      <T extends A & B & C>
    但是多边界使用时其实只能继承一个父类, 并且要将他写在第一个位置上. 其他的都是其实现的接口, 如:

    1 class A { /* ... */ }
    2 interface B { /* ... */ }
    3 interface C { /* ... */ }
    4 class D <T extends A & B & C> { /* ... */ }

    如果A不在第一个位置上就会编译出错.

  • 相关阅读:
    OpenCL、CUDA
    最小和最廉价的超级计算机,DIY的
    组装属于您自己的Tesla个人超级计算机
    多处理器系统
    开源项目Spark简介
    基于Cassandra的日志和分布式小文件存储系统【1】
    网络广告js备忘【2】
    网络广告js备忘【1】
    成功产品的意外
    Cassandra HBase和MongoDb性能比较
  • 原文地址:https://www.cnblogs.com/zhenyu-go/p/5536604.html
Copyright © 2011-2022 走看看