使用随机和超级

2022-09-03 13:31:29

如何将 a 从 调用到 ?Randomjava.util.Randomsupertype constructor

例如

Random rand = new Random();
int randomValue = rand.nextInt(10) + 5;

public Something() 
{
    super(randomValue);
    //Other Things
}

当我尝试这样做时,编译器说我“在被调用之前无法引用”。randomValuesupertype constructor


答案 1

调用必须是构造函数中的第一个调用,并且任何初始化实例变量的表达式将仅在超级调用返回后进行计算。因此,尝试将尚未声明的变量的值传递给超类的构造函数。super()super(randomValue)

一个可能的解决方案是使静态(为类的所有实例使用单个随机数生成器是有意义的),并在构造函数中生成随机数:rand

static Random rand = new Random();

public Something() 
{
    super(rand.nextInt(10) + 5);
    //Over Things
}

答案 2

另一种可能的解决方案是添加一个构造函数参数并具有工厂方法;

public class Something extends SomethingElse {
    private Something(int arg) {
        super(arg);
    }

    public static Something getSomething() {
        return new Something(new Random().nextInt(10) + 5);
    }
}

推荐