Является ли хорошей практикой иметь пакет / пространство имен и класс с одинаковыми именами? - PullRequest
6 голосов
/ 17 февраля 2011

Я создаю новое пространство имен, и наиболее подходящее имя для одного из классов, похоже, совпадает с именем пространства имен.Это хорошая практика?Если нет, то какова альтернатива?

Например:

com.person
|--- Person.(java/cs)
|--- PersonDetailChecker.(java/cs)
|--- PersonNameGenerator.(java/cs)

Связанные вопросы, обсуждающие ту же проблему:

Ответы [ 5 ]

4 голосов
/ 17 февраля 2011

Я бы постарался избежать этого, поскольку это может усложнить чтение вашего кода. Эрик Липперт написал статью об этом, которую вы можете найти здесь:

Я сам несколько раз совершал ошибку, и, конечно, мне было труднее читать некоторые из моихкод.

2 голосов
/ 17 февраля 2011

Это не проблема сделать на Java.

Но это НЕ хорошая практика: потому что хорошая практика будет означать, что вы должны это делать.(И это явно не факт.)

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

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

1 голос
/ 17 февраля 2011

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

0 голосов
/ 17 февраля 2011

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

Вложенный класс является своего рода в пространстве имен включающего класса. Люди могут сделать это

class Http
    class Request
        enum Method
    class Response
        class Code

Http.Request.Method.GET
new Http.Response.Code(123); 

Хотя я нахожу это вполне читабельным, я все равно придерживаюсь старого стиля

class Http
class HttpRequest
enum  HttpRequestMethod
class HttpResponse
class HttpResponseCode

HttpRequestMethod.GET
new HttpResponseCode(123); 
0 голосов
/ 17 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...