2013-11-28 3 views
2

Enum имеет valueOf метод:valueOf из Enum

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 

Так что, когда у меня есть перечисление:

public enum Basket { 
    APPLES, ORANGES, FLOWERS 
} 

код

Basket b = Basket.valueOf(Basket.class, "APPLES"); 

приносит мне то же самое объект, а также

Basket b2 = Basket.APPLES; 

i.e., b.equals (b2) является истинным из двух строк выше.

Что я задаюсь is-- что

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 

хорошо.

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

То же самое для valueOf-с одной parameter-- определяется неявно в Enum:

Basket.valueOf("APPLES"); 

делает то же самое, как

Basket.valueOf(Basket.class, "APPLES"); 

Что толку?

+0

I может быть недоразумением вопрос немного - это вы пытаетесь определить разницу между ними или варианты использования? – Makoto

+0

@ Makoto точно, что говорит Q - «что использовать для valueOf» - что бы пропало из java-мира, если оно там не было. см. ответ Ади ниже. – Roam

ответ

3
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 

используется, когда вы не знаете точный тип Enum. Это так, если вы пишете общий код. Одним из примеров является десериализация json для java-объекта. Вы можете получить «enumType» поля, хотя отражение и вызов,

Enum.valueOf(enumClass,fieldValue)

Если вы хотите увидеть реальное использование, проверка,

java.io.ObjectInputStream#readEnum 
Смежные вопросы