Когда вы должны использовать локальный класс в 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-анонимными внутренними классами. Я имею в виду: вы бы использовали локальный класс, если ваш класс полезен только в области метода. Но когда ваши методы доходят до такой степени, что они настолько сложны, вам нужно начать определять пользовательские классы внутри них, они, вероятно, уже слишком сложны и их нужно разделить. В какой момент ваш локальный класс должен стать внутренним классом, не так ли?
Каковы некоторые примеры того, когда локальные классы более желательны, чем внутренние классы, которые не связаны с суперкомплексными методами (чего следует избегать)?
Ответы
Ответ 1
Локальный класс - это то, что используется в каком-то конкретном методе и нигде больше.
Позвольте мне привести пример, я использовал локальный класс в своем декодере/кодировщике JPEG, когда я читал конфигурации из файла, которые будут определять дальнейший процесс декодирования. Это выглядело так:
class DecodeConfig {
int compId;
int dcTableId;
int acTableId;
}
В основном это всего три int
, сгруппированные вместе. Мне нужен был массив конфигураций, поэтому я не мог использовать только анонимный класс. Если бы я был кодированием в C, я бы использовал структуру.
Я мог бы сделать это с помощью внутреннего класса, но весь процесс декодирования обрабатывается одним методом, и мне не нужно использовать конфигурации где-либо еще. Вот почему локальный класс будет достаточным.
Это, конечно, самый базовый пример, но это из реальной жизни.