gpt4 book ai didi

java : return inherited child class type

转载 作者:行者123 更新时间:2023-12-04 05:28:25 24 4
gpt4 key购买 nike

我正在尝试使用 Hibernate 构建一个 CRUD 系统。
我想为我的所有数据库对象构建一个接口(interface):

public abstract class ADBElem { }

这是一个 DB 对象方法(读取)的示例:
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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com