gpt4 book ai didi

java - 这个双重泛型返回类型 (public TypedQuery) 表示什么?

转载 作者:行者123 更新时间:2023-11-30 06:19:14 24 4
gpt4 key购买 nike

JPA 和 Hibernate 有一些方法带有一些我不理解的通用返回类型,例如,

public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass)

AbstractEntityManagerImpl .我期望返回类型为 TypedQuery<T> . <T> 是什么意思在 TypedQuery<T> 之前指示?

这对我来说不是一个纯粹的理论问题。我有一些代码会出现编译错误。

    TypedQuery<LogEntity> query =
entityManager.createNamedQuery(
"LogEntity.findByContentionText",
LogEntity.class);

错误如下:

method createNamedQuery in interface javax.persistence.EntityManager cannot be applied to given types;
required: java.lang.String
found: java.lang.String,java.lang.Class<mypackage.LogEntity>
reason: actual and formal argument lists differ in length

这有点误导,因为 EntityManager.createNamedQuery重载:

public Query createNamedQuery(String name);

public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass);

错误指的是第一个定义,而我试图匹配第二个定义。我做错了什么?

最佳答案

泛型类/方法的参数类型必须在某个时候声明。对于泛型类,您可以在类定义中声明它:

class X<T> {}

另一方面,对于泛型的类中的泛型方法,您必须在方法声明本身中声明它:

class NotGeneric{
public <T> X<T> genericMethod(String s, Class<T> cls){}
}

最后,您的错误可能是由于其他问题造成的,例如,您可能有 javax.persistence 1.x 两个 1.x 2.0 同时在你的类路径中。重载方法 was added in 2.0 .

关于java - 这个双重泛型返回类型 (public <T> TypedQuery<T>) 表示什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501972/

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