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仕様でこれをどこに見つけるか知っていますか?
それらはinner(ネストされた非静的)クラスです:
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の内部クラスです。
Javaチュートリアル- http://docs.Oracle.com/javase/tutorial/Java/javaOO/nested.html および http:/ /docs.Oracle.com/javase/tutorial/Java/javaOO/innerclasses.html
この構文も以前に見たことがありませんが、BookStore
の内部クラスが作成されると思います。