Файл Java может иметь больше чем один класс?

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

101
задан Arnaud 13 January 2016 в 04:16
поделиться

7 ответов

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

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

124
ответ дан 24 November 2019 в 04:42
поделиться

Зависит ... Одним из таких примеров могут быть анонимные классы (вы столкнетесь с ними много при использовании прослушивателей событий и такие).

1
ответ дан 24 November 2019 в 04:42
поделиться

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

Исключение составляют случаи, когда класс лучше всего реализуется с использованием одного или нескольких небольших вспомогательных классов. Обычно за кодом легче всего следовать, когда эти классы присутствуют в одном файле. Например, вам может понадобиться небольшой класс-оболочка «кортеж» для передачи некоторых данных между вызовами методов. Другой пример - классы «задачи», реализующие Runnable или Callable. Они могут быть настолько маленькими, что их лучше всего комбинировать с родительским классом, создающим и вызывающим их.

4
ответ дан 24 November 2019 в 04:42
поделиться

Помимо анонимных внутренних классов, еще одним применением являются частные внутренние классы, реализующие открытый интерфейс ( см. Эту статью ). Внешний класс может получить доступ ко всем частным полям и методам внутреннего класса.

Это позволяет вам создавать два тесно связанных класса, таких как модель и ее представление, не раскрывая реализации ни того, ни другого. Другой пример - коллекция и ее итераторы.

4
ответ дан 24 November 2019 в 04:42
поделиться

Да, сколько угодно!

НО, только один «публичный» класс в каждом файле.

10
ответ дан 24 November 2019 в 04:42
поделиться

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

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

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

Класс Comparator обычно требует отдельного файла, чтобы быть общедоступным. Таким образом, он связан с классом, который его использует.

17
ответ дан 24 November 2019 в 04:42
поделиться

Да, может, но внутри любого пакета может быть только 1 открытый класс, поскольку компилятор java создает файл .Class с тем же именем, что и имя открытого класса, поэтому, если их больше, чем 1 публичный класс, и компилятору будет сложно выбрать то, каким должно быть имя файла класса.

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

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

2
ответ дан 24 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

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