我最近看到了一些使用这种语法的代码(amazon hadoop 代码)
Foo bar = new Foo().setX(10).setY(11);
我觉得这很甜蜜,所以我决定试一试。让我的setX()类型函数返回Foo而不是全部void放入。return this;这运作良好。直到我尝试使用继承,这产生了一些惊人的结果。
我将举一个具体的例子:我有两个类,一个Location类有两个字段,x 和 y。另一个类Location3D继承自Location并添加了第三个字段 z。所有字段都使用上述方法作为其设置器。
现在我想创建一个新的 location3D 实例并设置它的字段,会发生什么
new Location3D().setZ(7).setY(6).setX(5)
工作时
new Location3D().setX(7).setY(6).setZ(5)
没有。
by 不起作用我的意思是返回的setY(6)是一个Location对象而不是一个location3D对象,因此没有setZ()方法!
在这么长的介绍之后,我的问题是:这种形式的“setter stringing”是否可以在不强制调用者强制转换对象的情况下与继承一起使用?如果是这样怎么办?
我也确信有一个比“二传手穿线”更好的术语,它是什么?