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

9
我发现了类似以下的内容:
ArgProcessor argProcessor = runWebApp.new ArgProcessor(options);

这行代码来自于 GWT 的源代码。通过深入研究 Java 语法,我发现它是 (".new") 内部创建器。

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

内部创建器与普通对象/实例创建器有何不同?

3个回答

4
在此示例中,new 关键字在 runWebApp 实例的作用域内调用。这意味着 runWebApp.class 包含一个名为 ArgProcessor 的内部类。这是指定您正在构造 runWebApp 中的 ArgProcessor 的适当方式,而不是调用其他顶级 ArgProcessor 类的途径。
请注意,外部赋值将具有 ArgProcessor 的一个实例,但它将是 runWebAppArgProcessor 实例,而不是其他实例的 ArgProcessor 实例。偶尔会这样做是为了模拟旧式 C++ 类之间的 friend 接口;然而,还有其他原因可能会这样做。它基本上允许比实际编程语言提供的标准 publicprotecteddefaultprivate 接口更精细的方法。

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);
  }
}

0

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

因此,当您从外部类OuterClass的实例outerObject的非静态方法实例化内部类InnerClass时,创建的实例innerObject具有对outerObject的隐式引用。但是,当您想要从OuterClass之外的某个地方(或从静态方法)执行相同操作时,必须指定它将引用的OuterClass实例:通过在外部类的实例上调用new来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接