Подтвердить что ты не робот

Когда вы должны использовать локальный класс в Java?

Я только что открыл локальные классы в Java:

public final class LocalClassTest
{
  public static void main(final String[] args) {
    for(int i = 10; i > 0; i--) {
      // Local class definition--declaring a new class local to the for-loop
      class DecrementingCounter {
        private int m_countFrom;

        public DecrementingCounter(final int p_countFrom) {
          m_countFrom = p_countFrom;
        }

        public void count() {
          for (int c = m_countFrom; c > 0; c--) {
            System.out.print(c + " ");
          }
          System.out.println();
        }
      }

      // Use the local class
      DecrementingCounter dc = new DecrementingCounter(i);
      dc.count();
    }
  }
}

Я встретил этот комментарий: Преимущества локальных классов, в котором перечислены некоторые большие преимущества локальных классов над анонимными внутренними классами.

Мой вопрос заключается в том, что не похоже, что было бы много случаев, когда этот метод имел бы преимущества перед NON-анонимными внутренними классами. Я имею в виду: вы бы использовали локальный класс, если ваш класс полезен только в области метода. Но когда ваши методы доходят до такой степени, что они настолько сложны, вам нужно начать определять пользовательские классы внутри них, они, вероятно, уже слишком сложны и их нужно разделить. В какой момент ваш локальный класс должен стать внутренним классом, не так ли?

Каковы некоторые примеры того, когда локальные классы более желательны, чем внутренние классы, которые не связаны с суперкомплексными методами (чего следует избегать)?

4b9b3361

Ответ 1

Локальный класс - это то, что используется в каком-то конкретном методе и нигде больше.

Позвольте мне привести пример, я использовал локальный класс в своем декодере/кодировщике JPEG, когда я читал конфигурации из файла, которые будут определять дальнейший процесс декодирования. Это выглядело так:

class DecodeConfig {
    int compId;
    int dcTableId;
    int acTableId;
}

В основном это всего три int, сгруппированные вместе. Мне нужен был массив конфигураций, поэтому я не мог использовать только анонимный класс. Если бы я был кодированием в C, я бы использовал структуру.

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

Это, конечно, самый базовый пример, но это из реальной жизни.