Java泛型,不兼容类型的错误(与继承)
我有跟随着抽象类...Java泛型,不兼容类型的错误(与继承)
public abstract class IRepository<T> {
public T getEntityById(int idEntity){
try{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
T result = (T) session.createQuery(getByIdQuery() + idEntity).uniqueResult();
tx.commit();
if (result != null){
System.out.println("Fetched " + result.toString());
return result;
}
else return null;
}
catch (Exception e){
// TO DO : logging
handleException(e);
return null;
}
}
而另一个类,从这个继承...
public class ProductRepository extends IRepository<Product> {
public ProductRepository(){
}
}
当我从做一个主类下面的调用,我发现了一个错误...
ProductRepository prodRep = new ProductRepository();
Product result = prodRep.getEntityById(111);
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types
required: gestor.model.Product
found: java.lang.Object
我的问题是。为什么会出现这种情况?是不是我的getEntityById返回类型T的东西,在这种情况下,应该是产品?
我在Netbeans工作,编译时没有显示错误。
感谢您的帮助=)
我会怀疑您的导入或配置错误。在Eclipse中,您可以“清理”一个项目以清除所有二进制文件并重建;尝试Netbeans中的等效项。
下面的代码工作正常,对我来说,它似乎是你的问题的直接简化:
// Test.java
public abstract class Test<T> {
public T get(int i) {
return null;
}
public static void main(String[] args) {
StringTest st = new StringTest();
String s = st.get(0);
System.out.println(s); // prints: null
}
}
class StringTest extends Test<String> {
public StringTest() { }
}
浪费了很多时间,看起来像一个非常简单的解决方案,一旦我知道它..感谢很多Chargin,像一个魅力工作.. – 2013-05-11 03:30:31
什么结束了这个问题? – wchargin 2013-05-11 03:31:32
你建议...必须做一个清洁和重建项目:) – 2013-05-11 03:34:54
会发生什么,如果你尝试'IRepository prodRep =新ProductRepository()'? –
wchargin
2013-05-11 03:11:45
你可以试一下'Object result = prodRep.getEntityById(111);的System.out.println(结果);产品产品=(产品)结果;'? – wchargin 2013-05-11 03:21:43