0
点赞
收藏
分享

微信扫一扫

【Java泛型】泛型方法

慕容冲_a4b8 2022-01-22 阅读 88
  • 泛型类,是在实例化类的时候指明泛型的具体类型
  • 泛型方法,是在调用方法的时候指明泛型的具体类型
  • 泛型方法能使方法独立于类而产生变化
  • 如果static方法要使用泛型能力,就必须使其成为泛型方法
import java.util.ArrayList;
import java.util.Random;

/**
 * 抽奖器
 * @param <T>
 */
public class ProductGetter<T> {

    // 奖品
    private T product;
    // 奖品池
    ArrayList<T> list = new ArrayList<>();

    Random random = new Random();

    // 添加奖品
    public void addProduct(T t ) {
        list.add(t);
    }

    // 抽奖
    public T getProduct() {
        product = list.get(random.nextInt(list.size()));
        return product;
    }

    /**
     * 定义泛型方法
     * @param list 参数
     * @param <T> 泛型标识,具体类型由调用方法的时候来指定
     * @return
     */
    public <T> T getProduct(ArrayList<T> list) {
        return list.get(random.nextInt(list.size()));
    }

    /**
     * 静态的泛型方法,采用多个泛型类型
     * @param t
     * @param e
     * @param k
     * @param <T>
     * @param <E>
     * @param <K>
     */
    public static <T, E, K> void printType(T t, E e, K k) {
        System.out.println(t + "\t" + t.getClass().getSimpleName());
        System.out.println(k + "\t" + k.getClass().getSimpleName());
        System.out.println(e + "\t" + e.getClass().getSimpleName());
    }

    /**
     * 泛型可变参数的定义
     * @param e
     * @param <E>
     */
    public static <E> void print(E ... e) {
        for (int i = 0; i < e.length; i++) {
            System.out.println(e[i]);
        }
    }
}
import java.util.ArrayList;

public class Demo {
    public static void main(String[] args) {

      ProductGetter<Integer> productGetter = new ProductGetter<>();
      ArrayList<String> strList = new ArrayList<>();
      strList.add("笔记本电脑");
      strList.add("苹果手机");
      strList.add("扫地机器人");
      // 泛型方法的调用,类型是通过调用方法的时候指定
      String product1 = productGetter.getProduct(strList);
      System.out.println(product1 + "\t" + product1.getClass().getSimpleName());

      ArrayList<Integer> intList = new ArrayList<>();
      intList.add(100);
      intList.add(200);
      intList.add(300);
      Integer product2 = productGetter.getProduct(intList);
      System.out.println(product2 + "\t" + product2.getClass().getSimpleName());

      // 调用多个泛型类型的静态泛型方法
      productGetter.printType(1000,"java", true);

      // 可变参数的泛型方法的调用
      productGetter.print(1, 2, 3);
      productGetter.print("a","b","c");

    }
}

 

举报

相关推荐

0 条评论