契约式设计如何在Java中实现自定义类实例不变量
在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<;=最大基数
- 如果(constraint!=null),那么(minCardinality<;=constraint.getCardinality()<;=最大基数)
这里,边缘实例是由一个解析器创建的,该解析器具有(必需的)属性minCardinality和maxCardinality set。(可选)约束属性保留为空。然后将实例移交给另一个模块(测试帧生成器),该模块可以通过setter方法设置约束,也可以不设置约束
# 1 楼答案
使用一个建设者,把支票放进去;这样
Edge
类就不在乎了:用法: