“object.new”如何工作?(Java是否有.new运算符?)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

public static void getListOfBooks(String category, BookStore bookStore) { serviceInstance.getBooks(category, bookStore.new BookListUpdaterCallback()); } public static void storeOrder(List books, String userName, BookStore bookStore) { serviceInstance.storeOrder(books, userName, bookStore.new StoreOrderCallback()); }

那里有哪些新的运营商?我从来没有见过这样的语法,任何人都可以解释?

有没有人知道在java规范中找到这个地方?

提问于
用户回答回答于

它们是内部(嵌套的非静态)类:

public class Outer {
  public class Inner { public void foo() { ... } }
}

你可以做:

Outer outer = new Outer();
outer.new Inner().foo();

或者干脆:

new Outer().new Inner().foo();

原因是Inner有一个外部类的特定实例的引用。让我给你一个更详细的例子:

public class Outer {
  private final String message;

  Outer(String message) {
    this.message = message;
  }

  public class Inner {
    private final String message;

    public Inner(String message) {
       this.message = message;
    }

    public void foo() {
      System.out.printf("%s %s%n", Outer.this.message, message);
    }
  }
}

并运行:

new Outer("Hello").new Inner("World").foo();

输出:

Hello World

注意:嵌套类也可以static。如果是这样,他们没有this对外部类的隐式引用:

public class Outer {
  public static class Nested {
    public void foo() { System.out.println("Foo"); }
  }
}

new Outer.Nested.foo();

多数情况下,静态嵌套类是private因为它们倾向于实现细节,并且是封装问题的一部分而不会污染公共名称空间的简洁方式。

扫码关注云+社区