制限値のようにノードの条件をグラフに入れることは可能ですか? たとえば、1 つのノードが平均的である場合、その値は 20 を超えてはならないことを指定したい Java ではどうすればよいですか? どうもありがとう。
質問する
70 次
1 に答える
2
あなたはほとんど詳細を提供していないので、あなたが何をしようとしているのかを推測しようとします.
オブジェクトのフィールドの値を制限するための適切で簡単な方法は、すべてのフィールドが getter と setter を介してのみアクセス可能であることを確認し、setter に検証または調整を実行させることです。たとえば、例外をスローし、値が範囲外の場合に失敗する場合 (必要な例外タイプに置き換えます):
public class GraphNode {
...
private float value;
public float getValue () {
return value;
}
public void setValue (float value) throws Exception {
if (value > 20.0f)
throw new Exception("Value must be <= 20.");
this.value = value;
}
}
または、値を静かにクランプしたいだけの場合:
public class GraphNode {
...
private float value;
public float getValue () {
return value;
}
public void setValue (float value) {
this.value = (value > 20.0f) ? 20.0f : value;
}
}
次に、値を変更すると:
GraphNode node = ...;
node.setValue(someValue);
のロジックにより、 aの値が常に定義された制約内にあるsetValue
ことが保証されます。GraphNode
例外をスローする最初の例など、必要に応じてコンストラクターでこのロジックを再利用することもできます。
public class GraphNode {
...
public GraphNode (float value) throws Exception {
setValue(value); // throws if out of range
}
}
そうすれば、検証ロジックはすべて 1 か所にGraphNode
まとめられ、制約に違反する不変条件を設定できます (ほぼ完全を期すために、逆シリアル化後にも検証する必要があります)。
于 2013-08-13T19:57:04.003 に答える