随机枚举返回null



你好,我正在尝试获取随机ENUM,但它返回null,有人可以帮助我的代码出了什么问题?我试着独自修理它,但我放弃了。

public class LotteryMachine {
protected enum Sings {
ONE,
TWO,
THREE
}
private static final List<Sings> SINGS_LIST = Collections.unmodifiableList(Arrays.asList(Sings.values()));
private static final int SIZE = SINGS_LIST.size();
private static final Random RANDOM = new Random();
Sings randomSing() {
return SINGS_LIST.get(RANDOM.nextInt(SIZE));
}
}

public class Game {
private LotteryMachine lotteryMachine = new LotteryMachine();
private LotteryMachine.Sings singOne;
private LotteryMachine.Sings singTwo;
private LotteryMachine.Sings singThree;
private void Lottery(){
this.singOne = lotteryMachine.randomSing();
this.singTwo = lotteryMachine.randomSing();
this.singThree = lotteryMachine.randomSing();
}
public void viewLottery(){
System.out.print(singOne + " " + singTwo + " " + singThree);
}
}

您的问题似乎在这里

private void Lottery(){
this.singOne = lotteryMachine.randomSing();
this.singTwo = lotteryMachine.randomSing();
this.singThree = lotteryMachine.randomSing();
}

这不是构造函数;相反,它是一个名为Lottery()的私有方法,Game类不使用它。因为从未调用过该方法,所以所有singX字段都未初始化(即为null(。在您将初始化逻辑从所述方法移动到像这样的字段声明之后,事情应该会正常工作

private LotteryMachine.Sings singOne = lotteryMachine.randomSing();
private LotteryMachine.Sings singTwo = lotteryMachine.randomSing();
private LotteryMachine.Sings singThree = lotteryMachine.randomSing();

或者可替换地如下声明Game类的构造函数:

public Game() {
this.singOne = lotteryMachine.randomSing();
this.singTwo = lotteryMachine.randomSing();
this.singThree = lotteryMachine.randomSing();
}

最新更新