Как получить результаты редуктора hadoop в коллекции (массив, набор и т. Д.)?

Определенно можно извлечь его из Class#getGenericSuperclass() , потому что он не определен во время выполнения, но во время компиляции в FooDao extends BaseDao.

Вот пример запуска, как вы могли бы извлечь желаемый общий супер тип в конструкторе абстрактного класса, принимая во внимание иерархию подклассов (вместе с реальным случаем использования приложения на основе EntityManager без необходимости явно указывать тип):

public abstract class BaseDao {

    @PersistenceContext
    private EntityManager em;

    private Class type;

    @SuppressWarnings("unchecked") // For the cast on Class.
    public BaseDao() {
        Type type = getClass().getGenericSuperclass();

        while (!(type instanceof ParameterizedType) || ((ParameterizedType) type).getRawType() != BaseDao.class) {
            if (type instanceof ParameterizedType) {
                type = ((Class) ((ParameterizedType) type).getRawType()).getGenericSuperclass();
            } else {
                type = ((Class) type).getGenericSuperclass();
            }
        }

        this.type = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
    }

    public E find(Long id) {
        return em.find(type, id);
    }

    public List list() {
        return em.createQuery(String.format("SELECT e FROM %s e ORDER BY id", type.getSimpleName()), type).getResultList();
    }

    // ...
}

0
задан Lewen 25 February 2015 в 19:11
поделиться