Java泛型,不兼容类型错误(继承)

标签 java generics inheritance

我有以下抽象类...

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

关于Java泛型,不兼容类型错误(继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493362/

相关文章:

java - 带有 C++ 的 JNI 在 cout、printf 和方法调用上不断崩溃

java - 如何使用其属性查找 DOM 节点

delphi - Delphi 2009 中的通用 TList<> 在 IndexOf 上崩溃

java - java中内部类初始化的泛型数组

多个类的 C# 泛型参数

java - 重写和继承

c++ - 用于继承和构造函数的未解析的外部符号 c++

java - 模拟Guava CacheLoader回调方法

java - 使用 Hibernate 搜索进行搜索

swift - 等待一个属性初始化并将其用作将数据从数据库提取到另一个属性的引用,最佳实践?