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

时间:2012-01-06 21:49:56

标签: java class inline instantiation

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

有没有办法实例化对象并将其修改为内联?类似的东西:

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

我能够使用@Override方法,但我正在寻找更简单的方法。我有很多搜索,但是如果有这种内联实例的特定术语,那就是我无法实现的。

感谢您的时间!

2 个答案:

答案 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类都不是这样。您可以为您的课程实现它。