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

Java中的内联对象实例化和转换,java,class,inline,instantiation,Java,Class,Inline,Instantiation,我是从VisualBasic来到Java的,似乎觉得自己在很多方面都被宠坏了:p 有没有方法实例化一个对象并内联修改它?比如: JFrame aFrame = new JFrame(); aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) }); 我能够@重写方法,但我正在寻找更简单的方法。我有很多搜索,但如果有一个特定的术语来描述这种内联实例化,我就找不到它 谢

我是从VisualBasic来到Java的,似乎觉得自己在很多方面都被宠坏了:p

有没有方法实例化一个对象并内联修改它?比如:

JFrame aFrame = new JFrame();   
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });
我能够
@重写
方法,但我正在寻找更简单的方法。我有很多搜索,但如果有一个特定的术语来描述这种内联实例化,我就找不到它


谢谢你抽出时间JFrame aFrame = new JFrame(); aFrame.add(new JPanel() {{ setSize(100,100); setLocation(50,50); setBackground(Color.red); }});

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

在@ClickerMonkey的回答中展示了一个很好的技巧。但是,如果类支持方法链接,则可以使用类似的语法,而不使用初始值设定项“hack”:

缺点是ChainClass的外观必须与此类似:

public class ChainClass  {
  public ChainClass setSize(int w, int h)  {
     // ...
     return this;
  }

  public ChainClass setLocation(int x, int y)  {
    // ...
    return this;
  }

  // etc.
}

遗憾的是,大多数标准Java类并非如此。您可以为您的类实现它。

这种技术叫什么?我想了解更多。@SJuan76它被称为“带有初始值设定项的匿名类”。他在匿名类中使用实例初始化块,并调用它的继承方法,如下面所示。setSize…先生!你是上帝!我知道它一定存在,但我决不会想象使用另一副牙套!至于“带有初始值设定项的匿名类”,我做梦也想不到:再次感谢!需要注意的是,如果某个对象正在寻找某个特定的类,他们将无法得到它,因为每次使用该“技巧”时都会创建一个匿名类。这称为Fluent接口。jQuery使用这种技术。这就是为什么我希望在java中使用“this”返回类型的原因。特别是因为泛型类。。。当您有子类时,方法链接对于泛型来说很烦人。
public class ChainClass  {
  public ChainClass setSize(int w, int h)  {
     // ...
     return this;
  }

  public ChainClass setLocation(int x, int y)  {
    // ...
    return this;
  }

  // etc.
}