GCo*_*Con 18 java inline class instantiation
我从Visual Basic来到Java,似乎认为我曾经在很多方面被宠坏了:p
有没有办法实例化一个对象并内联修改它?就像是:
JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });
Run Code Online (Sandbox Code Playgroud)
我能够使用@Override方法,但我正在寻找更简单的方法.我有很多搜索,但是如果有这种内联实例化的特定术语,它就会让我失望.
感谢您的时间!
Cli*_*key 33
是的,但有些人认为这很糟糕.
JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {{
setSize(100,100);
setLocation(50,50);
setBackground(Color.red);
}});
Run Code Online (Sandbox Code Playgroud)
基本上你添加了另一层{}(实例初始化块),它在实例化面板时执行.因此你可以在里面放任何代码.(比如打电话给塞特犬).
在@ ClickerMonkey的回答中提出了一个很好的技巧.但是,如果类支持方法链接,则可以使用类似的语法而不使用初始化程序"hack":
new ChainClass().setSize(100,100) .setLocation(50,50) .setBackground(Color.red)
Run Code Online (Sandbox Code Playgroud)
缺点是ChainClass看起来必须类似于:
public class ChainClass {
public ChainClass setSize(int w, int h) {
// ...
return this;
}
public ChainClass setLocation(int x, int y) {
// ...
return this;
}
// etc.
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,对于大多数标准Java类来说,情况并非如此.您可以为您的课程实现它.