目录
一、泛型类的引入
假定我们有这样一个需求:写一个栈,能够对整型数组、字符串数组甚至其他任何类型的数据进行出入栈,该如何实现?答案是可以使用 Java 泛型。
使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型、浮点型、字符串等进行分别进行操作。
二、泛型的定义
泛型就是添加了一个类型参数,你可以在用泛型类或者泛型方法的时候确定这个泛型为一个确定的类型。
泛型的定义语法:
class 类名称 <泛型标识、泛型标识,...> {
private 泛型标识 变量名;
......
}
使用语法
(java 1.7以后,后边的<>中具体的数据类型可以省略不写)
类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();
注意:
1、泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
2、泛型的类型参数只能是类类型,不能是基本数据类型
3、泛型类型在逻辑上可以看成是多个不同的类型,但实际上是相同类型
三、常见的泛型标记
E | Element (在集合中使用,因为集合中存放的是元素) |
T | Type |
K | Key(键) |
V | Value(值) |
N | Number(数值类型) |
? | 表示不确定的 java 类型 |
四、举例抽奖器
抽奖器有实物奖品(字符串型)和奖金(数字)
public class productgetter<T> {
private T product;
ArrayList<T> arrayList = new ArrayList<>();
public void addproduct(T t){
arrayList.add(t);
}
Random random = new Random();
public T getproduct(){
product = arrayList.get(random.nextInt(arrayList.size()));
return product;
}
}
public class Test {
public static void main(String[] args) {
productgetter<String> stringproductgetter = new productgetter<>();
String[] strpro = {"apple","pear","peach","banana"};
//将实物奖品放入奖池
for (int i = 0;i<strpro.length;i++){
stringproductgetter.addproduct(strpro[i]);
}
String gift = stringproductgetter.getproduct();
System.out.println("恭喜抽中了"+gift);
System.out.println("***************");
productgetter<Integer> integerproductgetter = new productgetter<>();
Integer[] intpro = {10,11,12,13,14};
//将奖金放入奖金池
for (int i=0;i<intpro.length;i++){
integerproductgetter.addproduct(intpro[i]);
}
Integer money = integerproductgetter.getproduct();
System.out.println("恭喜获得奖金"+money+"yuan");
}
}
这样在运行时就会随机产生实物奖品和现金奖金。