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

    泛型方法其实和泛型类差不多, 就是把泛型定义在方法上, 格式大概就是:
      public <类型参数> 返回类型 方法名(泛型类型 变量名) {...}
    泛型方法又分为动态方法和静态方法,:
    1. 动态泛型方法其实在前一篇博文中我已经用到了,

     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 }

    其中的setObj()就是一个泛型方法, 只不过使用的是类中提供的泛型参数. 我们也可以给泛型方法定义自己的泛型参数:

    1 public class Box<T> {
    2 
    3     /*...*/
    4 
    5     public <Q> void print(Q q) {
    6         System.out.println(q);
    7     }
    8 
    9 }

    注意: 泛型参数要定义在返回值类型之前.
    这样我们就可以在调用该方法时指定其自己的泛型了:

    1 Box<Integer> b = new Box<>();
    2 b.<String>print("Hello");
    3 // b.<String>print(123); // 编译报错

    2. 静态泛型方法在使用时必须指定自己的类型参数, 因为静态方法随着类的加载而加载. 在静态方法加载时, 并不存在该类的实例对象, 因此也就无法使用类所提供的类型参数:

    1 public class Box<T> {
    2 
    3     /*...*/
    4 
    5     public static <Q> void print(Q q) {
    6         System.out.println(q);
    7     }
    8 
    9 }

    其使用方法与动态方法类似.
    3. 注意: 在调用有指定了自己的类型参数的泛型方法时, 其实并不需要显式地指定其泛型, Java在编译时完全可以自己推断出泛型的类型, 如:
    动态:

    1 b.print("Hello");

    静态:

    1 Box.print("Hello");

    因为传入的类型很明显是String的, 就不用再指定了.

  • 相关阅读:
    板邓:解决Visual Studio 2017 安装程序清单签名验证失败
    板邓:PHP获取当前页面url地址、参数
    板邓:【WordPress文件解读】wp-config.php
    板邓:【WordPress文件解读】wp-load.php
    板邓:【WordPress文件解读】wp-blog-header.php
    读取符号库文件
    创建空间参考
    针对乱码中文进行编辑
    根据图层路径选择文件(存储)
    springboot实现数据库中数据导出Excel功能
  • 原文地址:https://www.cnblogs.com/zhenyu-go/p/5536367.html
Copyright © 2011-2022 走看看