Могут ли разработчики Linux Java создавать классы имен, отличающихся только регистром, в одном и том же пакете?

2

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

  • 1
    Почему вы хотите сделать что-то, что сделает ваш код не переносимым? Я также не уверен, можно ли безопасно поместить полученные файлы * .class в JAR-файл. Разве ZIP поддерживает имена файлов, отличающиеся только регистром? Разве это не сломается на какой-нибудь платформе? Не говоря уже о том, что это нарушит соглашения об именах Java, поскольку они достаточно строги в отношении регистра в именах классов (каждое слово пишется с заглавной буквы).
Теги:
naming

4 ответа

3
Лучший ответ

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

  • 1
    Я только что попробовал это на Linux, а затем поместил скомпилированные классы в JAR и скопировал его в Windows. Некоторые программы просмотра архива видят только один из файлов классов внутри, но JVM прекрасно запускает приложение.
1

О чем ты говоришь?

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

Независимо от того, обрабатывает ли файловая система или ОС имена файлов как нечувствительные к регистру, не имеет значения.

  • 0
    Это уместно, если класс является общедоступным, потому что большинство реализаций Java заставляют имя файла совпадать с (только разрешенным) публичным именем класса в нем плюс «.java».
  • 0
    @Sergey - Так что , если вы называете ваш класс MyClass , имя файл должен быть MyClass , независимо от правил чувствительности к регистру файловой системы / OS. Да, это может быть myclass в нечувствительной к регистру системе, но тогда это не сработает.
Показать ещё 7 комментариев
0

Положив его на потомство, но ответ на вопрос Windows на этот вопрос таков: Несколько классов в одном файле Java, каждый с основным методом - неожиданное поведение?

0

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

В Linux вы можете это сделать, но это очень плохая идея. Полученный вами код/​​классы не будут переносимыми.

И вы обнаружите проблемы с инструментами управления версиями, IDE, другими ОС, некоторыми JVM и т.д.

Например: вы можете использовать символы, отличные от английского (utf8) для ваших классов. У меня есть классы с испанскими именами (с такими символами, как ñ, Ñ, á, à и т.д.). Вскоре или позже это будет проблемой, потому что не все файловые системы работают с utf8 (некоторые используют ansi-like, ascii или что-то еще). Очень длинные имена могут быть неприятностями. Некоторые файловые системы имеют ограничения на длину имени, например, файловые системы ISO-9660, некоторые версии FAT и т.д.

Оставайтесь на безопасном пути:)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню