Java 中的内联对象实例化和转换

2022-09-02 02:34:19

我是从Visual Basic来到Java的,似乎认为我在很多方面都被宠坏了:p

有没有办法实例化对象并内联修改它?像这样:

JFrame aFrame = new JFrame();   
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });

我能够找到方法,但正在寻找更简单的方法。我经常搜索,但如果这种内联实例化有一个特定的术语,我就躲过了。@Override

感谢您抽出宝贵时间接受采访!


答案 1

是的,但有些人认为它很笨拙。

JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {{
 setSize(100,100);
 setLocation(50,50);
 setBackground(Color.red);
}});

基本上,您添加了另一层(实例初始化块),该层在实例化面板时执行。因此,您可以在其中放置任何代码。(如呼叫设置器)。{}


答案 2

@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类来说,情况并非如此。不过,您可以为类实现它。