泛型小练习:泛型实现抽奖器
初步设想:
package generics.lottery;
// 抽奖类,使用泛型
// 类中应该有什么:数据字段,成员方法,构造方法
public class GenericsLottery<T> {
// 随机数,Random
// 奖品数据,集合ArrayList
// 抽奖类的构造方法
// 传入奖品数据的构造器
// 使用随机数,获取奖品集合中的数据,实现抽奖方法
}
编写代码:
package generics.lottery;
import java.util.ArrayList;
import java.util.Random;
// 抽奖类,使用泛型
// 类中应该有什么:数据字段,成员方法,构造方法
public class GenericsLottery<T> {
// 随机数,Random
private Random n = new Random() ;
// 奖品数据,集合ArrayList
protected ArrayList<T> prizeList = new ArrayList<>();
// 抽奖类的构造方法
public GenericsLottery(){}
// 传入奖品数据的构造器
public void setPrize(T prize){
this.prizeList.add(prize);
}
// 使用随机数n,随机获取奖品集合中的数据,实现抽奖方法
public T getPrize(){
return this.prizeList.get(n.nextInt(this.prizeList.size()));
}
}
package generics.lottery;
public class Start {
public static void main(String[] args) {
GenericsLottery<String> lottery = new GenericsLottery<>();
lottery.setPrize("手机");
lottery.setPrize("电脑");
lottery.setPrize("扫地机器人");
System.out.println(lottery.getPrize());
System.out.println("==================================");
}
}
问题
1.定义了抽奖类,却没有奖品字段,增加了抽奖方法实现的难度,优化:
增加private T product;
2.放入奖品方法,太麻烦,优化:
// 优化方法,一次传入多个奖品数据
public void optimizedSetPrize(T...prize){
// 将奖品数据写入到集合prizeList中
for (int i = 0; i < prize.length; i++) {
prizeList.add(prize[i]);
}
}
3.使用泛型的原因,一套模板,多种实现,抽String,Integer,People...

浙公网安备 33010602011771号