我正在尝试使用 Hibernate 构建 CRUD 系统。 我想为我的所有数据库对象构建一个接口(interface):
public abstract class ADBElem { }
这是数据库对象方法的示例(读取):
public static PrdProduct read(Integer id) {
Session session = HibernateUtil.getSessionFactory().openSession();
PrdProduct product = null;
product = (PrdProduct) session.get(PrdProduct.class, id);
session.close();
return product;
}
返回类型取决于继承的类,我如何将此方法放入我的抽象类中?
到目前为止我发现了什么:
public abstract class ADBElem<T> {
public static T read(Integer id) {
Session session = HibernateUtil.getSessionFactory().openSession();
T item = null;
item = (T) session.get(T.class, id);
session.close();
return item;
}
public class PrdProduct extends ADBElem<PrdProduct> {}
但它不起作用,我收到此错误:无法对非静态类型 t 进行静态引用
最佳答案
在抽象类中,您必须添加方法签名,其返回类型是 PrdProduct
的父类(super class)或其实现的接口(interface)。然后,无论具体类型如何,具体方法都必须返回相同的抽象类型。
public abstract class ADBElem {
public static SomeSuperCLass read(Integer id);
}
public class PrdProduct extends SomeSuperCLass {
public static SomeSuperCLassOrInterface read(Integer id) {
Session session = HibernateUtil.getSessionFactory().openSession();
PrdProduct product = null;
product = (PrdProduct) session.get(PrdProduct.class, id);
session.close();
// return product which is also a `SomeSuperClass`
return product;
}
}
关于java : return inherited child class type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924832/