JSF i bezpieczeństwo typu

Kiedy walczyłem godzinami, w końcu znalazłem te irytująceClassCastExceptionpochodzą z, jak sądziłem, były produkowane przez Hibernate i toenum-mapowanie.

Ale pochodziły z mojego widoku JSF, gdzie zdałemList z

    <h:selectManyCheckbox value="#{createUserManager.user.roles}"  ... >
        <f:selectItems value="#{createUserManager.roles}"/>
    </h:selectManyCheckbox>

z powrotem do mojej fasoli.
Moje dane składają się po prostu z wartości wyliczenia:public Role[] getRoles() { return Role.values(); } .
Byłem naprawdę zszokowany, kiedy testowałem seterroles wUser-class i dostał to:

public void setRoles(List<Role> paramRoles) {

    System.out.println(paramRoles.get(0) instanceof Role); //output: false

    for(Role role : paramRoles){ ...} //crashes with ClassCastException
}

Wymiana pieniędzyList<Role> paramRoles doList<String> paramRoles działało idealnie.
Jak to jest możliwe? Czy te generyczne nie powinny być bezpieczne dla typu lub czy wymazywanie typu w związku z zabijaniem przez JSF całego elementu bezpieczeństwa typu?
Również nie powinna zwracać wartościh:selectManyCheckbox byćList<Role>, tak jak przeszedłem przezf:selectItems?

questionAnswers(1)

yourAnswerToTheQuestion