【发布时间】:2012-07-18 16:41:15
【问题描述】:
在之前在这里回答几个问题时以及最近我一直在做的一些工作中,我一直想知道为什么 Java 不支持其内置类的方法链接。
例如,如果我要创建一个 Car 类,我可以通过重新调用 this 而不是 void 来使其可链接,如下所示:
public class Car {
private String make;
public Car setMake(String make) {
this.make = make;
return this;
}
}
内置库不倾向于以这种方式做事有什么特别的原因吗?方法链有缺点吗?
我可能忽略了一些可以解释缺少方法链接的东西,但是任何默认返回 void 的 setter 方法都应该返回对 this 的引用(至少在我看来应该如此)。这将使以下情况更加清晰。
container.add((new JLabel("label text")).setMaximumSize(new Dimension(100,200)));
而不是冗长的:注意:如果你愿意,它不会阻止你以这种方式编码。
JLabel label = new JLabel("label text");
label.setMaximumSize(new Dimension(100,200));
container.add(label);
我很想听听这个决定背后的原因,如果我不得不猜测这会是一个相关的开销,所以应该只在需要时使用。
【问题讨论】:
-
您的示例也显示了方法链接的缺点:只需查看代码,您设置的最大大小并不是很明显:是标签还是容器?一个放错位置的右括号,事情可能会大错特错。
-
@JonTaylor 我不确定依靠空格/格式化是一个好的解决方案。
-
@ColinD 如果这只是一个可读性问题,那么我认为没有理由不使用空格来使其更清晰,这不是人们不写 if/else all on a single的原因吗行,或者确实将他们的整个程序写在一行上?
-
@GeorgeStocker 我不明白为什么应该关闭它,这是一个完全有效的措辞良好的问题,我已经得到了一些完全有效的答案。这不应该被关闭。
-
@JonTaylor 我同意,任何对问题和答案只看了一眼的人都可以看到它们包含的大部分事实信息也可能对其他人有用。
标签: java methods chaining method-chaining