gpt4 book ai didi

java - 反射 - getInterfaces() 显示奇怪的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 07:21:04 24 4
gpt4 key购买 nike

使用Hibernate ,我得到一个List<BlablaPO> ( BlablaPO 实现 Blabla )。当我做这样的事情时:

for(Blabla blabla : list) {
Class<?>[] interfazes = blabla.getClass().getInterfaces();
}

这段代码只是接受Collection<T>的一段代码的一部分。 。今天,我在新的List<Blabla>上再次使用了这段代码。 ,我返回的接口(interface)中没有 Blabla,而是得到 2 个接口(interface):

  • 界面org.hibernate.proxy.HibernateProxy
  • 界面javassist.util.proxy.ProxyObject

我是否错误地加载了集合?我尝试急切地加载该集合。

编辑:我相当确定问题是因为我延迟加载了我的集合。

最佳答案

发生这种情况是因为 Hibernate 将您的实例替换为代理您自己的类的生成类。例如,像这样的 bean:

class Foo implements SomeInterface {
@OneToMany
public List<MyBean> getBar() { ... }
}

将由 Hibernate 进行子类化,类似于以下类:

class Foo$Hibernate extends Foo implements HibernateProxy, ProxyObject {
@Override
public String getBar() { Hibernate.loadFromDBOnDemand(); }
}

当你请求Foo$Hibernate的接口(interface)时,您将看不到SomeInterface ,您必须首先导航至 SomeInterface 。病情foo instanceOf SomeInterface但会继续持有,并且可能是您想要的。

关于java - 反射 - getInterfaces() 显示奇怪的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567572/

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