我今天在阅读Accelerated 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()); }
那些新运营商在那里做什么?我从未见过这样的语法,有人可以解释吗?
有人知道在Java规范中的哪里可以找到它吗?
它们是 内部 (嵌套的非静态)类:
public class Outer { public class Inner { public void foo() { ... } } }
你可以做:
Outer outer = new Outer(); outer.new Inner().foo();
或者简单地:
new Outer().new Inner().foo();
这样做的原因是Inner引用了外部类的特定实例。让我给你一个更详细的例子:
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对外部类的隐式引用:
static
this
public class Outer { public static class Nested { public void foo() { System.out.println("Foo"); } } } new Outer.Nested.foo();
静态嵌套类经常private会成为实现细节,并且是封装问题的一部分而又不污染公共名称空间的一种巧妙方法,通常如此。
private