Jon*_*eet 24
我不明白为什么界面不能定义getter和setter.例如,List.size()
实际上是一个吸气剂.接口必须定义行为而不是实现 - 它不能说你将如何处理状态,但它可以坚持你可以得到它并设置它.
例如,集合接口都是关于状态的 - 但是不同的集合可以以完全不同的方式存储该状态.
编辑:评论表明,getter和setter意味着一个简单的字段用于支持存储.我强烈反对这种含义.在我看来,有一个含义是获取/设置值"相当便宜",但并不是说它存储为具有简单实现的字段.
编辑:正如评论中所述,这在JavaBeans规范第7.1节中已明确说明:
因此,即使脚本编写器输入某些内容,例如
b.Label = foo
仍然有一个方法调用到目标对象来设置属性,并且目标对象具有完全的编程控制.因此,属性不仅仅是简单的数据字段,它们实际上可以是计算值.更新可能有各种程序性副作用.例如,更改bean的背景颜色属性也可能导致使用新颜色重新绘制bean."
如果假定的含义是正确的,我们也可以直接将属性作为字段公开.幸运的是,这种含义并不成立:获取者和制定者完全有权计算事物.
例如,考虑一个组件
getWidth()
getHeight()
getSize()
Run Code Online (Sandbox Code Playgroud)
你是否相信存在三个变量?要么有以下方面是不合理的:
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
}
Run Code Online (Sandbox Code Playgroud)
或者(最好是IMO):
private Size size;
public int getWidth() {
return size.getWidth();
}
public int getHeight() {
return size.getHeight();
}
public Size getSize() {
return size;
}
Run Code Online (Sandbox Code Playgroud)
这里size属性或高度/宽度属性只是为了方便 - 但我没有看到这使它们以任何方式无效.
oxb*_*kes 13
我认为通常声明有两种类型的接口:
CalculationService
.我不认为方法getX
应该在这种界面中,当然也不应该setX
.它们非常清楚地暗示了实现细节,这不是这种类型接口的工作.注意:集合类可能适合类型#2
一般来说,我认为 bean 上不应该有一个接口。javabean 是更一般意义上的接口。接口指定了更复杂的东西的外部契约。javabean 的外部契约及其内部表示是相同的。
不过,我不会说你不应该在接口中使用 getter。拥有一个由 DataThingieBean 实现的 ReadableDataThingie 接口是非常有意义的。
归档时间: |
|
查看次数: |
29002 次 |
最近记录: |