2014-12-01 2 views
0

Я пытаюсь определить тип перечисления с целыми значениями. Я пытаюсь сделать это, потому что я использую это значение в нескольких местах в моем коде, и это может быть только так. Код ниже не работает. Я предполагаю, что я не должен использовать перечисление, подобное этому. Вместо этого следует использовать класс и поместить возможные значения в массив?Определение перечисления целочисленных значений в java

public enum Pitch { 
    "60" , "62", "64", "65", "67", "69", "71", "72", "74"; 

} 
+1

Не похоже, что вам нужно перечислить здесь. Чего вы пытаетесь достичь? Предположим, что этот код работает, как вы его используете? – Maroun

+0

Вы должны заметить, что перечисление * является * классом. Рекомендуемое чтение: [учебник Oracle о типах перечислений] (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html). – RealSkeptic

ответ

2

Я не уверен, что перечисление является лучшим выбором, но вы можете попробовать что-то вроде:

public enum Pitch { 
    p60(60), p62(62), ...; 

    private final int pitch; 

    Pitch(int pitch) { 
     this.pitch = pitch; 
    } 

    public int getValue() { 
     return pitch; 
    } 
} 
+1

'p60 (60)' является признаком того, что вам не нужно перечисление. – Maroun

+0

Это по-прежнему действительный дизайн, если вы хотите иметь конечное число возможных значений, которые могут быть использованы, и иметь для вас защиту компилятора. – Gimby

+0

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

1

Вы должны указать имени LITERALS перечислений.

Что вы можете сделать, это

public enum Pitch 
{ 
    SOMENAME(60), 
    SOMEOTHERNAME(62), 
    // ... 
    SOMELASTNAME(74); 

    public final int value; 

    public Pitch(int val) 
    { 
     this.value = val; 
    } 
} 

Затем вы можете получить доступ к конкретным значениям по имени, и вы можете написать

Pitch pitch = ...; 
int pitchInt = pitch.value; 

работать со значениями.

0

Если вы хотите получить доступ к значениям над индексом, вы должны использовать массив как

String[] pitch = new String[] { 
    "60" , "62", "64", "65", "67", "69", "71", "72", "74" 
}; 

Перечисления используются не держите значения в виде и дать им имена вместо:

public enum Weekday { 
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 
} 

Таким образом, вы получаете доступ к значениям вместо имени вместо индекса.