Enum-metoda vauleOf()

0

Jak wygląda wywołanie metody klasy Enum<E extends Enum<E>>:

static <T extends Enum<T>> T valueOf(Class<T> e-type, String
name)

– znalazłem że zwraca ona stałą wyliczenia zwiazaną z name dla typu wyliczeniowego e-type
ale nie potrafię jej zastosować:( Bardzo proszę o jakiś prosty przykład.

0

Thread.State st = Enum.valueOf(Thread.State.class, "NEW");

0

Dzięki.A dla takiego wyliczenia jak to będzie wyglądało?

enum litery{A, B}

class wyliczenie{

 public static void main (String [] args){
 litery l=Enum.valueOf(litery.class, "A");
 }
}

Co tu jest źle?

0

Nic, u mnie dziala.

0

a u mnie nie wiem dlaczego nie działa, wyskakuje:
cannot find sybol
symbol : method valueOf(java.lang.Class<litery>,java.lang.String)
location: class Enum
litery l=Enum.valueOf(litery.class, "A");
1 error
BUILD FAILED (total time: 0 seconds)

0

Więc sprawdziłem to w mc i w nim się kompiluje i działa. A ten błąd o którym pisałem wcześniej wystąpił w netbeans. Dlaczego w netbeans nie działa? Poza tym w jakich przypadkach używać tej metody, bo jest też taka działająca podobnie:
public static typ_wyliczeniowy valueOf(String s) ?

0

Proponowałbym po prostu wziąć porządny podręcznik do współczesnej wersji Javy bo konstrukcji języka nie da się wywnioskować z javadoc. :)

Do każdej lasy wyliczenia kompilator dodaje metody values() oraz valueOf(). Co ważne ta druga metoda ma tylko jeden argument. Natomiast matoda klasy Enum po której z definicji dziedziczą wszystkie wyliczenia ma również metodę valueOf, ale dwuargumentową.

Wersja dwuargumentowa jest niezbędna po wykonaniu rzutowania w górę do typu Enum ponieważ w tym procesie jest zacierana informacja o typie parametryzowanym. Trzeba więc tę informację po prostu dodać. Bez rzutowania (czyli w czasie "normalnego" działania) nie potrzeba precyzować typu klasy bo jest ona znana kompilatorowi.
Generalnie metody valueOf nie używa się w zwykłych zastosowaniach wyliczeń, a często podczas zabawy z łączeniem kilku typów wyliczeniowych lub generowaniem wartości wyliczenia gdy samego wyliczenia nie znamy (dostaliśmy go "skądś" jako nieznany obiekt dziedziczący po klasie Enum). Mniej więcej o to chodzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1