Когда-либо разумно вложить Java внутренние классы больше чем один уровень глубоко?

Мое любимое соглашение для цикличного выполнения по подобному матрице набору состоит в том, чтобы использовать x+y, как они используются в декартовых координатах:

for x in width:
    for y in height:
        do_something_interesting(x,y)
10
задан Community 23 May 2017 в 10:29
поделиться

5 ответов

Нет. Я нет.

Стандартным примером класса внутри класса является Builder, где у вас есть подкласс, который помогает создать соответствующий экземпляр с учетом множества возможных методов конфигурации.

Лично я бы рассмотрел более сложный случай вложенных классов и отличный пример кода, требующего рефакторинга.

5
ответ дан 3 December 2019 в 22:00
поделиться

Если вы генерируете код из некоторых данных, вложенные классы могут быть хорошим способом избежать конфликтов имен.

3
ответ дан 3 December 2019 в 22:00
поделиться

Конечно - иногда это действительно так. Я сделал это несколько минут назад.

Например, в каком-то тестовом коде, который я написал, я хотел установить какой-то шаблон, который обрабатывал бы выполнение нескольких вызываемых объектов. Шаблон необходим для создания нескольких экземпляров вызываемого фрагмента кода. В этом примере я создаю экземпляр фабрики для передачи в 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 ...;
                }};
        }});
}

Гораздо более кратко, чем создание двух новых классов, в которых один просто создает другой. Конечно, здесь есть штраф читабельности, пока вы не привыкнете к стилю, хотя ...

Если вы объедините это с методом шаблона для управления транзакциями или подключением / закрытием базы данных, это может закончиться тремя глубокими. (У меня был такой код; если вы это сделаете,

1
ответ дан 3 December 2019 в 22:00
поделиться

Я видел использование количества уровней вложенных классов.

Существует устаревшая машина под названием Tandem (от HP), которая изначально запускает код COBOL / C. Есть позже "

2
ответ дан 3 December 2019 в 22:00
поделиться

Я лично не сталкивался со случаями, когда требовалось более одного. Я могу предвидеть случай, когда два могут оказаться полезными. Однако мне сложно представить больше двух.

Я представляю пример в коде графического интерфейса пользователя Java. В определенных обстоятельствах может быть полезно иметь класс, вложенный в уже вложенный ActionListener.

3
ответ дан 3 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: