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.