Как это " возражает.новая " работа? (Есть ли у 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());
}
что там делают эти новые операторы? Я никогда не видел такого синтаксиса, может кто-нибудь объяснить?
кто-нибудь знает, где найти это в спецификации Java?
3 ответа:
они внутренний (вложенные нестатические) классы:
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являются внутренними классами книжного магазина.Посмотреть Учебном Руководстве По Java - http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html и http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html