我今天在阅读 Accelerated GWT (Gupta) - page 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
引用了外部类的特定实例。让我给你一个更详细的例子:
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
,因为它们往往是实现细节和封装问题的一部分而不污染公共(public)命名空间的巧妙方式。
关于java - "object.new"是如何工作的? (Java 有 .new 运算符吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2863157/