2014-02-03 3 views
-4

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

public class MyCodeConstants { 
    public static final String VALUE_1 = "VALUE1"; 
    public static final String VALUE_2= "VALUE2"; 
} 

или

public interface MyCodeConstants { 
    public static final String VALUE_1 = "VALUE1"; 
    public static final String VALUE_2= "VALUE2"; 
} 

которых один ЛУЧШИЙ практика состоит в использовании и почему ??

+0

почему вы хотите константы, определенные в интерфейсе? Похоже, что выставлять механику системы в интерфейсе как ненужную деталь. –

+0

Вы действительно хотите, чтобы клиенты реализовали этот интерфейс? Использование 'interface' для побочного эффекта принудительного публичного статического финала не является достаточно хорошей причиной. (действительно, используйте 'enum') – roippi

+0

@ T McKeown. Я хочу знать, какая из них является лучшей практикой и причиной для этого. даже если я сделаю константы в классе, это будет не то же самое, что «разоблачить механику системы как ненужную деталь». –

ответ

1

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

Should a collection of constants be placed in a class or interface?

+0

большое спасибо за ответ –

+0

ответ возможен для меня и объясняет, что мне нужно понять –

1

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

Однако, если действительно имеет смысл иметь общедоступные константы (имена намерений для Android, коды состояния HTTP), тогда они должны идти по типу, к которому они принадлежат. В случае кодов статуса HTTP они наиболее тесно связаны с HttpServletResponse, который является интерфейсом, и поэтому они идут туда. Если константы связаны с классом (и это не лучший дизайн для вывода интерфейса из этого класса), они должны туда идти.

+0

большое спасибо за ответ, ответ мне полезен !! –

Смежные вопросы