package com.model.fanxing;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @Description:测试类
* @Author: 张紫韩
* @Crete 2021/6/30 23:03
* 演示泛型方法的使用
* 泛型方法和泛型类没有关系,当泛型类中标识类和泛型方法的标识类中有相同的标识符时,他们直接也不会相互影响,即泛型类指定的类型,
* 于泛型方法指定的类型是两码事,他们事不会相互影响,泛型方法脱离泛型类的控制
*
* 泛型方法的返回值可以时泛型方法指定的任意类型,而泛型类中的成员方法返回的只能是类中指定的泛型类型
* 泛型方法可以是静态的,泛型类中的成员方法不能是静态的
*
* 泛型方法支持静态的
* 支持可变参数的泛型方法
*
*/
public class FanXingDemo06 {
public static void main(String[] args) {
Product<String> product = new Product<>();
product.add("a");
product.add("b");
product.add("c");
product.add("d");
System.out.println(product.getProduct());
ArrayList<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
list.add(400);
System.out.println(product.getProduct02(list));
ArrayList<String> strList = new ArrayList<>();
strList.add("a");
strList.add("b");
strList.add("c");
strList.add("d");
System.out.println(product.getProduct02(strList));
// 静态的泛型方法的调用
System.out.println(Product.getProduct04(strList));
// 可变参数的泛型方法的调用
product.get(1,2,3,4,5,6);
product.get("a","b","c","d");
}
}
class Product<E>{
private E product;
List<E> list=new ArrayList<>();
public void add(E product){
list.add(product);
}
public E getProduct(){
product=list.get(new Random().nextInt(list.size()));
return product;
}
public <T> T getProduct02(ArrayList<T> list2){ //泛型方法有标识符列表 <E,T>,且只有标识列表中有的标识符,返回值和参数中才能用
return list2.get(new Random().nextInt(list2.size()));
}
public <E> E getProduct03(ArrayList<E> list3){ //泛型方法有标识符列表 <E,T>
return list3.get(new Random().nextInt(list3.size()));
}
// 静态的泛型方法
public static <E> E getProduct04(ArrayList<E> list4){ //泛型方法有标识符列表 <E,T>,
return list4.get(new Random().nextInt(list4.size()));
}
// 可变参数的泛型方法
public <E> void get(E... e){
for (E v:e){
System.out.println(v);
}
}
}