“object.new”如何工作? (Java是否有.new运算符?)
今天我在阅读加速GWT(Gupta) – 第151页时遇到了这个代码。
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()); }
那里有哪些新的运营商? 我从来没有见过这样的语法,任何人都可以解释?
有谁知道在哪里可以find这个在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
因为它们倾向于实现细节,并且封装问题的一部分而不会污染公共名称空间。
BookListUpdaterCallback
和StoreOrderCallback
是BookStore的内部类。
我还没有看过这个语法,但是我认为它会创build一个BookStore
的内部类。