-4

制限値のようにノードの条件をグラフに入れることは可能ですか? たとえば、1 つのノードが平均的である場合、その値は 20 を超えてはならないことを指定したい Java ではどうすればよいですか? どうもありがとう。

4

1 に答える 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 に答える