我有以下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.<
我是否错误地传递了参数?
答案 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
)之类的内容