gpt4 book ai didi

grails - 从 ins.getClass().getSimpleName() 获取 Item_$$_javassist_165

转载 作者:行者123 更新时间:2023-12-02 14:15:00 25 4
gpt4 key购买 nike

我有三个实现复合模式的类:Item、Cluster 和 Element。

class Item extends Locatable {
...
}

class Cluster extends Item {

static hasMany = [items:Item]

...
}

class Element extends Item {
...
}

我的域模型比这更复杂,但这只是一个例子。
当我有一个 Item 实例并且我想知道它是具有 ins.getClass().getSimpleName() 的集群还是元素时我得到了一个奇怪的类名: Item_$$_javassist_165 , 如果我做 println ins.toString()我打印了正确的类名( toString 方法返回 this.getClass().getSimpleName())。

如何获得正确的类名?这是什么 "Item_$$_javassist_165"类(class)名称?

最佳答案

What is this "Item_$$_javassist_165" class name?



这意味着您拥有的对象是 Hibernate 延迟加载代理。当您第一次尝试访问该对象的 id 以外的任何内容时,Hibernate 将转到数据库并加载真实数据,然后将任何 future 的方法调用委托(delegate)给真实对象。
ins instanceof Cluster 的明显方法当您有一个扩展另一个域类时,在存在代理的情况下可能无法正常工作,但 GORM 提供了注入(inject)的 instanceOf method这可以满足您的需要,并将正确处理代理。
if(ins.instanceOf(Cluster)) { .... }

关于grails - 从 ins.getClass().getSimpleName() 获取 Item_$$_javassist_165,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18357476/

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