Как мне "valueOf" перечислить имя класса? - PullRequest
6 голосов
/ 09 июня 2010

Допустим, у меня есть простой Enum под названием Animal, определяемый как:

public enum Animal {
    CAT, DOG
}

, и у меня есть такой метод:

private static Object valueOf(String value, Class<?> classType) {
    if (classType == String.class) {
        return value;
    }

    if (classType == Integer.class) {
        return Integer.parseInt(value);
    }

    if (classType == Long.class) {
        return Long.parseLong(value);
    }

    if (classType == Boolean.class) {
        return Boolean.parseBoolean(value);
    }

    // Enum resolution here

}

Что я могуположить в этот метод, чтобы вернуть экземпляр моего enum, где значение имеет тип classType?

Я пытался:

    if (classType == Enum.class) {
        return Enum.valueOf((Class<Enum>)classType, value);
    }

Но это не работает.

1 Ответ

9 голосов
/ 09 июня 2010

Ваш classType не Enum, это Animal.Итак,

if (classType.isEnum()) {
    return Enum.valueOf(classType, value);
}

должно работать.Кроме того, вы должны использовать equals() вместо == для сравнения экземпляров класса (хотя == будет работать на практике, если вокруг всего один загрузчик классов).

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