Java 接口使用指南 -- 接口中的 getter 和 setter 是坏的吗?
人们如何看待在界面中使用的最佳指南?接口中应该和不应该进入什么?
我听人们说,作为一般规则,接口只能定义行为而不是状态。这是否意味着接口不应包含 getter 和 setter?
我的观点:对于设置者来说可能不是这样,但有时我认为getters被放置在一个界面中是有效的。这仅仅是为了强制实现类来实现这些 getter,从而指示客户端能够调用这些 getter 来检查某些内容,例如。
人们如何看待在界面中使用的最佳指南?接口中应该和不应该进入什么?
我听人们说,作为一般规则,接口只能定义行为而不是状态。这是否意味着接口不应包含 getter 和 setter?
我的观点:对于设置者来说可能不是这样,但有时我认为getters被放置在一个界面中是有效的。这仅仅是为了强制实现类来实现这些 getter,从而指示客户端能够调用这些 getter 来检查某些内容,例如。
我不明白为什么接口不能定义 getter 和 setter。例如,实际上是一个获取者。接口必须定义行为而不是实现 - 它不能说你将如何处理状态,但它可以坚持你可以获取它并设置它。List.size()
例如,集合接口都是关于状态的,但不同的集合可以以完全不同的方式存储该状态。
编辑:评论表明,getters和setters意味着一个简单的字段用于支持存储。我强烈反对这种暗示。在我看来,有一种暗示是,获取/设置值是“相当便宜的”,但并不是说它被存储为具有简单实现的字段。
编辑:如注释中所述,这在 JavaBeans 规范第 7.1 节中明确说明:
因此,即使脚本编写器键入诸如某些内容,仍然有一个方法调用目标对象来设置属性,并且目标对象具有完全的编程控制。
b.Label = foo
因此,属性不一定只是简单的数据字段,它们实际上可以计算值。更新可能会产生各种编程副作用。例如,更改 Bean 的背景色属性也可能导致使用新颜色重新绘制 Bean。
如果假设的含义是正确的,我们也可以直接将属性作为字段公开。幸运的是,这种含义并不成立:获取者和设置者完全在他们计算事物的权利范围内。
例如,考虑具有以下组件的组件
getWidth()
getHeight()
getSize()
你认为有三个变量的含义吗?拥有以下两者是否合理:
private int width;
private int height;
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public Size getSize() {
return new Size(width, height); // Assuming an immutable Size type
}
或者(最好是IMO):
private Size size;
public int getWidth() {
return size.getWidth();
}
public int getHeight() {
return size.getHeight();
}
public Size getSize() {
return size;
}
在这里,size属性或高度/宽度属性只是为了方便 - 但我不认为这会使它们以任何方式无效。
我认为一般有两种类型的接口声明:
CalculationService
getX
setX
注意:集合类可能适合键入 #2