2014-09-13 2 views
3

У меня есть класс, который имеет только постоянный. Фрагменты кода является:Лучшая практика определения константы - внутри класса или внутри интерфейса?

public class CommonConstant 
{ 

    public static final String DAY     = "DAY"; 
    public static final String WEEK    = "WEEK"; 
    public static final String MONTH    = "MONTH"; 
    public static final String YEAR    = "YEAR"; 
    public static final String ACCEPTED   = "accepted"; 
    public static final String REJECTED   = "rejected"; 
    public static final String ADDED    = "added"; 
    public static final String MODIFIED   = "modified"; 

} 

Это хорошая практика, чтобы задать константы в файле класса или он должен быть в интерфейсе? Что такое хорошая практика?

+6

Возможно в перечислении! –

+2

Посмотрите на этот вопрос, я думаю, что это именно то, что вы хотите: http://stackoverflow.com/questions/1372991/should-a-collection-of-constants-be-placed-in-a-class-or- интерфейс – Bono

+0

Интерфейс определяет требуемое поведение для произвольных классов - если константы связаны с требуемым интерфейсом, поместите там константы! – ErstwhileIII

ответ

3

Поскольку константы относятся к реализации, вы должны поместить их в класс с частным конструктором или, альтернативно, перечислением. Джошуа Блох в «Эффективной Java 2-й редакции» препятствует использованию «постоянных интерфейсов».

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

и более относительно постоянных интерфейсов

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

BlocHquoted :)

НТН, Carlo

+0

, поскольку вы ссылаетесь на эффективную java, было бы полезно указать на элемент, который препятствует использованию интерфейсов. –

+0

Блох обескуражил его, потому что ... –

3

What is a good practice

Это на самом деле хорошая практика

public enum EnumTest { 
    DAY("DAY"), WEEK("WEEK"), MONTH("MONTH"), YEAR("YEAR"); 

    private String value; 

    private EnumTest(String s) { 
     value = s; 
    } 

    public String getValue() { 
     return value; 
    } 

} 

Тогда в где-то еще

System.out.println(EnumTest.DAY.getValue()); // give you the value 

или

for(EnumTest e :EnumTest.values()){ //values return an array of enum values 
    System.out.println(e); 
} 
+0

модификатор private избыточен для enum constructor – Bharat

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