gpt4 book ai didi

java - 使用泛型避免未经检查的转换

转载 作者:搜寻专家 更新时间:2023-10-31 20:25:16 24 4
gpt4 key购买 nike

我想学习更多关于泛型的知识,为此我决定编写一个简单的应用程序。它允许使用 CriteriaQuery 检索所有实体的列表。

首先,我尝试使用类型参数 (T) 生成代码。但是,我的代码甚至无法编译。为什么?

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();
}

我想到了另一个解决方案。它工作正常,但编译器通知我有关未经检查的转换。 我明白其中的原因,但我想知道是否有可能以更优雅的方式编写这段代码(即没有未经检查的转换)?如果是这样,我该怎么做?

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();
}

可以肯定的是,我知道 @SuppressWarnings("unchecked")

最佳答案

First of all, I tried to generify code by using type parameter (T). However, my code will not even compile. Why?

不允许使用类的实例参数化类型,但必须使用类型本身:

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

需要改为:

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

关于java - 使用泛型避免未经检查的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51676648/

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