Evitando de fundición sin control utilizando los genéricos

MENTEITH:

Yo quería aprender algo más acerca de los genéricos y hacer así que decidí escribir una aplicación sencilla. Permite a la lista de todas las entidades que utilizan recuperar CriteriaQuery.

En primer lugar, he tratado de código mediante el uso de generify type parameter( T ). Sin embargo, mi código ni siquiera compilar. ¿Por qué?

private static <T> List<T> retrieveAllT(Session session, 
    CriteriaBuilder criteriaBuilder, T t) {
        CriteriaQuery<t> query = criteriaBuilder.createQuery(t);
        Root root = query.from(t);
        query.select(root);
        return session.createQuery(query).getResultList();
    }

Yo he llegado con otra solución. Funciona bien, pero informa el compilador conmigo de fundición sin control. Yo entiendo la razón de eso, pero me gustaría saber si es posible escribir este pedazo de código de una manera más elegante (es decir, sin la fundición sin marcar)? Si es así, ¿cómo lo hago?

private static List<?> retrieveAll(Session session,
    CriteriaBuilder criteriaBuilder, Class clazz) {
        CriteriaQuery query = criteriaBuilder.createQuery(clazz);
        Root root = query.from(clazz);
        query.select(root);
        return session.createQuery(query).getResultList();
    }

Sin duda, soy consciente de @SuppressWarnings("unchecked").

Jacob G.:

En primer lugar, he tratado de código generify utilizando el parámetro de tipo (T). Sin embargo, mi código ni siquiera compilar. ¿Por qué?

No se le permite parametrizar un tipo con una instancia de una clase, pero debe utilizar el tipo en sí:

CriteriaQuery<t> query = criteriaBuilder.createQuery(t);

Necesita ser cambiado a:

CriteriaQuery<T> query = criteriaBuilder.createQuery(t);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=182231&siteId=1
Recomendado
Clasificación