複数のクラスで使用されるランダムなint値を作成したいと思います。これらのクラスのインスタンスの新しいセットを作成するたびに、この新しいランダムなint値をこれらすべてに使用する必要があります。ただし、ランダムな値は同じである必要があります。
つまり、データを生成するために連携して動作する複数のクラス間でランダムなインデックスを作成して使用する必要があります。
このランダムな値はスタックの最上位で生成され、一緒に機能している各クラス内で静的に呼び出される必要がありますか?
複数のクラスで使用されるランダムなint値を作成したいと思います。これらのクラスのインスタンスの新しいセットを作成するたびに、この新しいランダムなint値をこれらすべてに使用する必要があります。ただし、ランダムな値は同じである必要があります。
つまり、データを生成するために連携して動作する複数のクラス間でランダムなインデックスを作成して使用する必要があります。
このランダムな値はスタックの最上位で生成され、一緒に機能している各クラス内で静的に呼び出される必要がありますか?
ランダムな値を持つフィールドを含むクラスを作成するだけです。これにアクセスするためのgetterメソッドを提供します。次に、このクラスの新しいインスタンスをクラスの新しいバッチごとに共有します。
例えば
private static final Random random = new Random();
private final int randomValue = random.nextInt();
...
public int getRandomValue() {
return randomValue;
}
このように、乱数はクラスのグループごとに同じですが、グループごとに異なります。
このようなものはどうですか
static class Utility {
private static final int variable = (int)Math.round(1000*Math.random());
public static int getVariable() {
return variable;
}
}
Math.PIなどのように機能します。例:
System.out.println(Utility.getVariable());
コンストラクターの関連オブジェクトに渡すだけです。
class Main {
public static void main() {
Random rnd = new Random();
for (...) {
int index = rnd.nextInt();
// one set of related instances
Foo f = new Foo(index);
Bar b = new Bar(index);
}
}
}
class Foo {
int randomIndex;
public Foo(int randomIndex) {
this.randomIndex = randomIndex;
// etc.
}
}
class Bar { ... }
クラスのインスタンス間で値を変えたい場合(それらが同時に存在するかどうかに関係なく)、静的にしないでください。
まず、各グループに関連付けられたメタデータを保持する専用クラスを使用して、話している「グループ」の概念を具体化します。
class Group
{
private int index = -1;
public Group(int index)
{
this.index = index;
}
public int getIndex()
{
return index;
}
}
次に、各クラスにグループ情報データを割り当てます。
各オブジェクトをインスタンス化する前にインデックスがわかっている場合は、コンストラクターを使用してください。ファクトリパターンは、インスタンス化プロセスが複雑な場合にカプセル化するのに役立つ可能性があることに注意してください。
後者を知っていて、それでもインスタンスにアクセスできる場合は、専用の方法を使用してください。
public void assignToGroup(Group group)
インスタンスにアクセスできなくなった場合は、単純な反転を使用できます。各インスタンスはそのグループを要求します。
getMyGroup(this)
外部メソッドへ:
public Group getMyGroup(MyClass instance)
{
// ... some complex logic to determine the right group based on the instance state ...
}