我从 Visual Basic 转向 Java,似乎认为我在很多方面都被宠坏了 :p
有没有办法实例化一个对象并内联修改它?比如:
JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });
我能够使用
@Override
方法,但我正在寻找更简单的方法。我搜索了很多,但如果有一个特定的术语来描述这种内联实例化,我却找不到。
感谢您的宝贵时间!
是的,但有些人认为它很hacky:
JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {{
setSize(100,100);
setLocation(50,50);
setBackground(Color.red);
}});
基本上,您添加了另一层
{}
(实例初始化块),该层在实例化面板时执行。因此您可以在其中放入任何代码。 (就像调用 setter 一样)。
@ClickerMonkey 的回答中提出了一个很好的技巧。但是,如果类支持方法链,您可以使用类似的语法,而无需初始化程序“hack”:
new ChainClass().setSize(100,100) .setLocation(50,50) .setBackground(Color.red)
缺点是 ChainClass 必须与此类似:
public class ChainClass {
public ChainClass setSize(int w, int h) {
// ...
return this;
}
public ChainClass setLocation(int x, int y) {
// ...
return this;
}
// etc.
}
遗憾的是,大多数标准 Java 类的情况并非如此。不过,您可以在您的课程中实现它。