Originariamente inviato da Lucked
Ahhh ok, bravo, mi ero perso nelle < >
La dichiarazione sembra "contorta" ma solo a prima vista:

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

Il parametro è semplice: è un java.lang.Class di un certo tipo. Il T è dichiarato come T extends Enum<T> ma non è difficile. Ha solo lo scopo di "limitare" cosa può essere quel Class. In sostanza impedisce di passare un Class qualunque (come String.class o Integer.class) mentre accetta solo Class di un tipo enum.

Accetta il Class di Seme perché il tipo Seme estende Enum<Seme> e in questo caso la parametrizzazione corrisponde.