gpt4 book ai didi

java - 如何指定通用类型作为函数参数

转载 作者:行者123 更新时间:2023-11-30 02:44:46 28 4
gpt4 key购买 nike

我想为返回结果的 JSE 应用程序创建 JPA 事务。

@SuppressWarnings("unchecked")
public static <T> T transaction(EmWorker worker, Class<T>clazz){

EntityManager em = createEntityManager();
em.getTransaction().begin();

// >>> My Functional interface
Object result = worker.work(em);

em.getTransaction().commit();
em.close();
return (T)result;
}

它适用于获取单个对象:

FunkoPop gandalf=EmFactory.transaction(   eManager -> { 
return eManager.find(FunkoPop.class, 1);
}, FunkoPop.class);

但是现在,我想要一个 ListFunkoPop .

List<FunkoPop> list =EmFactory.transaction(   e -> {

String query = "SELECT f FROM FunkoPop f ";
List<FunkoPop> l = e.createQuery(query, FunkoPop.class).getResultList();
return l;

}, List<FunkoPop>.class); //Won't compile ; or List.class gives warnings

transaction需要两个参数:一个 lambda 和一个类。我大致了解我无法捕获类型 List<FunkoPop>.class因为此参数将丢失 <FunkoPop>通用的。没有警告的解决方案是什么?

最佳答案

你不能,因为没有List<FunkoPop>类型。所有的都有一个List .

但是,您可能会采取困难的方式:

List<T> transaction(EmWorker worker, Class<T>clazz) {
...
List<T> l = (List<T>)e.createQuery(query, clazz).getResultList();
return l;
}

您可能需要重命名该方法。

关于java - 如何指定通用类型作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527856/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com