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

Куда поместить внутренние классы?

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

Вот почему мне интересно, где вы, ребята, объявляете свои внутренние классы.

Я выполняю следующую схему упорядочения метода, потому что это довольно часто:

public void foo() {
    usedByFoo();
}

private void usedByFoo() {
}

public void bar() {
}

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

Теперь я мог бы сделать то же самое с внутренними классами, например:

class Outer {
    private Inner inner;

    private class Inner {};

    public Outer() {
    }

    ...
}

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

Какой стиль я должен соблюдать, учитывая мой способ упорядочения? Каков наиболее распространенный способ сделать это?

4b9b3361

Ответ 1

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

Ответ 2

Мой предпочтительный стиль заключается в том, чтобы помещать их везде, где они кажутся наиболее полезными. Обычно это внизу, так что они не в пути, но иногда я нахожу, что имеет смысл поставить их перед определенной группой методов (если это методы, которые используют внутренний класс.)

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