Обработка строк, не соответствующих Java enum - PullRequest
2 голосов
/ 17 июня 2011

Я пишу интерпретатор, который анализирует массив строк и присваивает каждому слову в этом файле числовое значение.

Что я хочу сделать, это:

Если словоне найден в перечислении, вызовите внешний метод parse() для этого конкретного элемента массива.

Мой код выглядит примерно так:

private enum Codes {keyword0, keyword1};

switch Codes.valueOf(stringArray[0])
{

case keyword0:
{
    value = 0;
    break;
}
case keyword1:
{
    value = 1;
    break;
}
default:
{
    value = parse(StringArray[0]);
    break;
}
}

К сожалению, когда это находит то, чтоне равняется "keyword0" или "keyword1" во входных данных, я получаю

Нет enum const class

Заранее спасибо!

Ответы [ 2 ]

11 голосов
/ 17 июня 2011

Когда нет соответствующего значения enum, всегда будет выброшено IllegalArgumentException. Просто поймай это, и ты в порядке.

try {
    switch(Codes.valueOf(stringArray[0])) {
        case keyword0:
           value = 0;
           break;
        case keyword1:
           value = 1;
           break;
    }
}
catch(IllegalArgumentException e) {
    value = parse(stringArray[0]);
}
3 голосов
/ 17 июня 2011

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

Codes codes = null;
try {
    Codes codes = Codes.valueOf(stringArray[0]);
} catch (IllegalArgumentException ex) {

}

if(codes == null) {
    value = parse(StringArray[0]);
} else {
    switch(codes) {
        ...
    }
}

Если вы выполняете синтаксический анализ в тяжелых условиях, вы также можете захотеть посмотреть на полноценный парсер, например ANTLR .

...