Java 中强制执行类实例不变量的最佳方法是什么(即确保某些语句在调用任何公共方法之前和之后都是正确的)?
我将在下面包含一个示例(让我对这个问题感到疑惑的示例),但实际上我对强加类实例不变量的通用解决方案更感兴趣。
假设我有以下课程:
public class Constraint
{
private int cardinality;
// constructor and getter/setter omitted
}
public class Edge
{
private int minCardinality = 1;
private int maxCardinality = Integer.MAX_VALUE;
private Constraint constraint = null;
// constructors, getters/setters and other methods omitted
}
并且我想对 Edge 类强制执行以下语句:
- 0 <= minCardinality <= maxCardinality
- if (constraint != null) then (minCardinality <= constraint.getCardinality() <= maxCardinality)
此处 Edge 实例由具有(强制性)属性 minCardinality 和 maxCardinality 集的解析器创建。(可选)约束属性留空。然后将实例移交给另一个模块(测试帧生成器),该模块可能会或可能不会通过 setter 方法设置约束。