我有两个课程:Being
和Environment
。这两个类在某些时候都需要生成一个随机数。
最初,在需要随机数之前,我有一个Random
的实例作为Environment
的成员,我将其称为nextInt()
。现在Being
需要随机数字,而且我不确定最佳设置。
我的第一个想法是给Being
和Enviro
的每个实例提供Random
的自己的实例,但这似乎很浪费。
然后我考虑在Environment
中存储一个Random,并以某种方式将其传递给每个Being
,但我认为我可能最终还是需要将它存储在每个实例中;所以它不会比第一个想法更好。
然后我想到用一个public static
Random实例创建一个单独的类;但这意味着我只有2个类才能获得一个随机数(使用的随机类I' m实际上是随机的派生类)
最后,我想到全球宣布它。这留下了两个问题:
我该怎么做?从我迄今为止从Java中看到的(我相当新的)来看,不可能有一个全局声明的对象实例。
这是最好的解决方案吗?我还应该做些什么?
我不在乎可重复性,也不是SecureRandom。
答案 0 :(得分:1)
拥有Random
的多个实例并不浪费。我不这样做的唯一原因是,随机数是否需要为某种目的而重现。您没有提到想要控制随机种子或序列,因此您似乎只能拥有多个Random
个实例。
答案 1 :(得分:0)
你可以用它。它是一个单例(意味着它可以随时拥有一个对象的最大值)。您可以使用静态方法获取实例:MyRandom random = MyRandom.getInstance();
import java.security.SecureRandom;
public class MyRandom {
final private static MyRandom singleton = new MyRandom();
final private SecureRandom random = new SecureRandom();
//it is important to keep this, so no one can make multiple instances of this class
private MyRandom() {
}
final synchronized static public MyRandom getInstance() {
return singleton;
}
final synchronized public int nextInt() {
return random.nextInt();
}
final synchronized public long nextLong() {
return random.nextLong();
}
}
答案 2 :(得分:-1)
另一种方法是使用界面:
public interface MyRandom {
static final SecureRandom random = new SecureRandom();
}
然后让您的Being
和Environment
类实现MyRandom
接口