我最近看到了一些使用这种语法的代码(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”是否可以在不强制调用者强制转换对象的情况下与继承一起使用?如果是这样怎么办?
我也确信有一个比“二传手穿线”更好的术语,它是什么?