Получение класса от универсального T

Вот другой подход.

Попробуйте удалить кластер из программы, которую вы запускаете. Когда вы закончите свои вычисления, пусть ваша программа сама вызовет команду удаления кластера.

    print("Try to delete cluster %s " % job_args['cluster_name'] )
    result = subprocess.call(['gcloud',
                              'dataproc',
                              'clusters',
                              'delete',
                              job_args['cluster_name'],
                              '--quiet',
                              '--async'])
    print("Sent command result: %s" % str(result))
11
задан Michael Myers 29 April 2009 в 14:42
поделиться

2 ответа

You could have the Class passed as a constructor argument.

public class HibernateDao <T, ID extends Serializable> implements GenericDao<T, ID> {

    private final Class<? extends T> type;

    public HibernateDao(Class<? extends T> type) {
        this.type = type;
    }

    // ....

}
17
ответ дан 3 December 2019 в 04:33
поделиться

Есть способ определить класс аргумента типа T с помощью отражения:

private Class<T> persistentClass = (Class<T>)
    ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];

Вот как я его использую:

public class GenericDaoJPA<T> implements GenericDao<T> {

    @PersistenceContext
    protected EntityManager entityManager;

    protected Class<T> persistentClass = figureOutPersistentClass();

    private Class<T> figureOutPersistentClass() {
        Class<T> clazz = (Class<T>)((ParameterizedType) (getClass().getGenericSuperclass())).getActualTypeArguments()[0];
        log.debug("persistentClass set to {}", clazz.getName());
        return clazz;
    }

    public List<T> findAll() {
        Query q = entityManager.createQuery("SELECT e FROM " + persistentClass.getSimpleName() + " e");
        return (List<T>) q.getResultList();
    }

}

Я полагаю, это работает, только когда ваш ConcreteEntityDao является прямым суперклассом HibernateDao .

Я нашел его здесь: www.greggbolinger .com / blog / 2008/04/17 / 1208457000000.html

7
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: