3 回答
TA贡献1851条经验 获得超5个赞
在Java中,最接近这样做的方法可能是构造过程中的双花括号习惯用法。
Foo foo = new Foo() {{
bar();
reset(true);
myVar = getName(); // Note though outer local variables must be final.
}};
另外,this可以将返回的方法链接在一起:
myName =
foo
.bar()
.reset(true)
.getName();
哪里bar和reset方法返回this。
但是,想要这样做往往表示该对象没有足够丰富的行为。尝试将其重构为被调用的类。也许有不止一个班试图脱身。
TA贡献1797条经验 获得超4个赞
使用Java 8 lambda可以使您非常接近,但缺点是无法修改局部变量。
声明此方法:
static <T> void with(T obj, Consumer<T> c) {
c.accept(obj);
}
因此,您可以使用:
Window fooBarWindow = new Window(null);
String mcHammer = "Can't Touch This";
with(fooBarWindow, w -> {
w.setAlwaysOnTop(true);
w.setBackground(Color.yellow);
w.setLocation(300, 300);
w.setTitle(mcHammer); // can read local variables
//mcHammer = "Stop!"; // won't compile - can't modify local variables
});
使用匿名类也可以这样做,但不是很干净。
添加回答
举报