泛型类的使用
不使用泛型,我们写入集合的元素需要是Object类型,虽然什么类型的元素都可以存入集合,但取出元素使用时我们需要强制转换为元素原来的类型,这就需要我们明确知道每个元素的数据类型,否则很容易引发ClassCastException异常。
使用泛型,先指定数据类型,后期取用不需要再转换。
泛型类的定义语法:
class 类名称<泛型标识,泛型标识,…>{
private 泛型标识 变量名;
……
}
常用的泛型标识:T、E、K、V
泛型类使用语法:
类名<具体的数据类型> 对象名=new 类名<具体的数据类型>();
Java1.7以后,后面的<>中的具体的数据类型可以省略不写
类名<具体的数据类型> 对象名=new 类名<>();
泛型类在创建对象的时候,没有指定类型,将按照Object类型来操作。
泛型类不支持基本数据类型,只能是类类型。(指定整型时,不能用int,要用Integer)
同一泛型类,根据不同的数据类型创建的对象,本质上是同一类型。(泛型类 类类型)
从泛型类派生子类:
子类也是泛型类,子类和父类的泛型类型要一致
class ChildGeneric<T> extends Generic<T>
子类不是泛型类,父类要明确泛型的数据类型
classs ChildGeneric extends Generic<String>
泛型类举例:使用泛型类,编写简单的抽奖器。
1 package FanXing; //泛型类编写 2 3 import java.util.ArrayList; 4 import java.util.Random; 5 6 //创建泛型类ProductGetter(抽奖器) 7 public class ProductGetter<T> { 8 Random random=new Random(); 9 //奖品 10 private T product; 11 12 //奖品池 13 ArrayList<T> list=new ArrayList<>(); 14 15 //添加奖品 16 public void addProduct(T t) { 17 list.add(t); 18 } 19 20 //抽奖 21 public T getProduct() { 22 product=list.get(random.nextInt(list.size())); 23 return product; 24 } 25 }
1 package FanXing; //测试类 2 3 public class MainClass { 4 5 public static void main(String[] args) { 6 //创建抽奖器对象,指定数据类型(String) 7 ProductGetter<String> stringProductGetter=new ProductGetter<>(); 8 String strProduct[]= {"苹果手机","华为手机","咖啡机","扫地机器人"}; 9 //给抽奖器中填充奖品 10 for(int i=0;i<strProduct.length;i++) { 11 stringProductGetter.addProduct(strProduct[i]); 12 } 13 //抽奖品 14 String product1=stringProductGetter.getProduct(); 15 System.out.println("恭喜您,您抽中了:"+product1); 16 17 System.out.println("---------------------------"); 18 19 //创建抽奖器对象,指定数据类型(Integer) 20 ProductGetter<Integer> IntProductGetter=new ProductGetter<>(); 21 int intProduct[]= {10000,8000,6000,3000,1000,5000}; 22 //给抽奖器中填充奖金 23 for(int i=0;i<intProduct.length;i++) { 24 IntProductGetter.addProduct(intProduct[i]); 25 } 26 //抽奖金 27 int product2=IntProductGetter.getProduct(); 28 System.out.println("恭喜您,您抽中了:"+product2); 29 } 30 31 }
运行结果如下:


浙公网安备 33010602011771号