Мое любимое соглашение для цикличного выполнения по подобному матрице набору состоит в том, чтобы использовать x+y, как они используются в декартовых координатах:
for x in width:
for y in height:
do_something_interesting(x,y)
Нет. Я нет.
Стандартным примером класса внутри класса является Builder, где у вас есть подкласс, который помогает создать соответствующий экземпляр с учетом множества возможных методов конфигурации.
Лично я бы рассмотрел более сложный случай вложенных классов и отличный пример кода, требующего рефакторинга.
Если вы генерируете код из некоторых данных, вложенные классы могут быть хорошим способом избежать конфликтов имен.
Конечно - иногда это действительно так. Я сделал это несколько минут назад.
Например, в каком-то тестовом коде, который я написал, я хотел установить какой-то шаблон, который обрабатывал бы выполнение нескольких вызываемых объектов. Шаблон необходим для создания нескольких экземпляров вызываемого фрагмента кода. В этом примере я создаю экземпляр фабрики для передачи в threadadedTest, и эта фабрика создает новые вызываемые объекты.
@Test public void testXXXXXXXX() throws Throwable {
threadedTest(new CallableFactory() {
@Override public Callable<Request> create() {
return new Callable<Request>() {
// might have state
@Override public Request call() throws Exception {
// do the steps for this test
return ...;
}};
}});
}
Гораздо более кратко, чем создание двух новых классов, в которых один просто создает другой. Конечно, здесь есть штраф читабельности, пока вы не привыкнете к стилю, хотя ...
Если вы объедините это с методом шаблона для управления транзакциями или подключением / закрытием базы данных, это может закончиться тремя глубокими. (У меня был такой код; если вы это сделаете,
Я видел использование количества уровней вложенных классов.
Существует устаревшая машина под названием Tandem (от HP), которая изначально запускает код COBOL / C. Есть позже "
Я лично не сталкивался со случаями, когда требовалось более одного. Я могу предвидеть случай, когда два могут оказаться полезными. Однако мне сложно представить больше двух.
Я представляю пример в коде графического интерфейса пользователя Java. В определенных обстоятельствах может быть полезно иметь класс, вложенный в уже вложенный ActionListener.