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

Есть ли способ сделать частичные классы в Java (например, С#)?

У С# есть эта замечательная концепция, в которой класс может быть распространен в нескольких файлах.cs. Это отлично работает там, где вам нужен один объект (переменные-члены, которым нужен весь код), но там тонна кода. Затем вы можете распространить этот код по функциональности в исходных файлах.

Есть ли способ сделать это на Java?

Обновление: сначала я сказал себе, что это должен быть один большой класс (он выполняет компоновку содержимого файла DOCX). Но потом, после публикации этого, я подумал об этом больше, и меня действительно беспокоило, что именно эта большая (5, 000+ строк).

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

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

4b9b3361

Ответ 2

Нет, Java не поддерживает частичные классы.

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

Пример использования признаков:

trait FunctionalityA {
  // some stuff implemented here
}

trait FunctionalityB {
  // more stuff implemented...
}

// etc...

class MyBigClass extends FunctionalityA with FunctionalityB with FunctionalityC

Ответ 3

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

Напротив, вы можете определить дополнительные классы в этом файле и в определении класса (верхнего уровня).

Ответ 4

Нет, это одна из замечательных особенностей Java. Класс должен быть идентичен имени ее файла. :-)