什么是Java中的内部创建者(objectinstance.new)?

时间:2011-05-04 18:32:28

标签: java

我遇到了像

这样的东西
ArgProcessor argProcessor = runWebApp.new ArgProcessor(options);

此行来自GWT的来源。通过深入研究Java的语法,我发现它是(“。new”)内在创造者。

但是我没有找到任何关于为什么我们需要内部创作者的正确文档。

这与普通对象/实例创建者有何不同?

3 个答案:

答案 0 :(得分:4)

用于创建内部类类型的对象。

例如:看看这个

http://www.javabeat.net/tips/124-inner-classes-in-java.html

即:

class Outer{

  final int z=10;

  class Inner extends HasStatic {
    static final int x = 3;
    static int y = 4;
  }

  public static void main(String[] args) {
    Outer outer=new Outer();
    System.out.println(outer.new Inner().y);
  }
}

答案 1 :(得分:4)

此示例中的new关键字在runWebApp实例的范围内调用。这意味着runWebApp.class包含一个名为ArgProcessor的内部类。这是在ArgProcessor中指定您构造runWebApp并且不调用其他顶级ArgProcessor类的适当方法。

请注意,外部赋值将具有ArgProcessor的实例,但它将是runWebApp的{​​{1}}实例,而不是其他实例的ArgProcessor实例。偶尔,这样做是为了模拟类之间的旧式C ++ ArgProcessor接口;但是,还有其他原因可以解决这个问题。它基本上允许比实际编程语言可用的标准friendpublicprotecteddefault接口更细粒度的方法。

答案 2 :(得分:0)

内部类是在另一个类中定义的类。如果它不是静态的,则内部类的每个实例都具有对外部类的实例的隐式引用。它可以在内部类中访问,如下所示:OuterClass.this

因此,当您从外部类InnerClass的实例outerObject的非静态方法实例化内部类OuterClass时,创建的实例innerObject具有隐式参考outerObject。但是当你想从OuterClass之外的某个地方(或从静态方法)做同样的事情时,你必须指定它将引用的OuterClass实例:你通过调用{{1}来做到这一点在外部类的实例上。