泛型小练习:泛型实现抽奖器

初步设想:

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...

posted @ 2021-08-15 23:31  CH0701  阅读(91)  评论(0)    收藏  举报