我从Visual Basic来到Java,似乎认为我在很多方面被宠坏了:p
有没有办法实例化对象并将其修改为内联?类似的东西:
JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });
我能够使用@Override
方法,但我正在寻找更简单的方法。我有很多搜索,但是如果有这种内联实例的特定术语,那就是我无法实现的。
感谢您的时间!
答案 0 :(得分:29)
是的,但有些人认为这很糟糕。
JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {{
setSize(100,100);
setLocation(50,50);
setBackground(Color.red);
}});
基本上你添加了另一层{}
(实例初始化块),它在实例化面板时执行。因此你可以在里面放任何代码。 (比如打电话给塞特犬)。
答案 1 :(得分:9)
在@ 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类都不是这样。您可以为您的课程实现它。