Java在运行时确定类型T.

时间:2013-11-20 11:10:20

标签: java jpa arraylist

我有以下Java代码;

PagedResponse<Person> response = new PagedResponse<Person>();
TypedQuery<Person> query = getNamedQuery("Person.findSpecific", Person.class);
response = executePagedTypedQuery(query);

现在executePagedTypedQuery被定义为;

protected <T> PagedResponse<T> executePagedTypedQuery(TypedQuery query) {

PagedResponse<T> response = new PagedResponse<T>();
List<T> resultList = query.getResultList();

}

现在我想在executePagedTypedQuery()方法中,类型T应该设置为“Person”,这就是我传递的内容。 但出于某种原因,在调试时,它说

T = >"T" is not a known variable in the current context.<

我是否错误地传递了参数?

2 个答案:

答案 0 :(得分:1)

如果您将签名更改为

protected <T> PagedResponse<T> executePagedTypedQuery(TypedQuery<T> query)

然后当您传递查询时,将相应地选择T

答案 1 :(得分:0)

您没有错误地调用该方法; T不作为参数传递给方法。

Java中的泛型基本上是编译时的语法糖,以防止你不得不在任何地方进行大量的演员表。编译器将生成该方法的编译代码,假设对T的所有引用都是对最大父类型T的引用(如果它具有类型约束),或Object如果它没有&#39 ; t有约束。这称为type erasure

根据C#中的情况对此进行收缩 - 您的代码实际上可以访问类型参数,因此您可以在方法中编写new T();typeof(T)(相当于Java T.class)之类的内容