gpt4 book ai didi

Javassist:重新创建一个类 - 先删除,还是 defrost() 然后修改?

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:43 25 4
gpt4 key购买 nike

我使用 Javassist 创建一个类。在测试套件中,当第二个测试试图创建相同的类时,它在 pool.makeClass( ... ) 处失败,因为该类被卡住(即已经通过 toClass( )

克服这个问题的方法是什么?理想情况下,第一个测试应该以某种方式删除类——也许从类加载器中卸载——但正如我所读in JLS ,卸载操作不可靠。

所以也许解决方法是检查创建代码的类是否存在,如果存在,defrost() 它,删除所有成员等,然后重新创建它。

还有其他想法吗?

或者有什么可靠的方法可以通过 Javassist 删除类吗?

最佳答案

您不能从 ClassLoader 卸载单个类。如果一个类及其 ClassLoader 变得无法访问,则该类可能会被卸载,但由于每个类都引用其加载器,这意味着该加载器加载的所有类也必须变得无法访问。

但是您可以使用不同的 ClassLoader(重新)创建类。好吧,从形式上讲,它是一个具有相同名称(可能还有相同字节码)的不同类。如果在测试用例中执行的代码没有在堆中留下任何引用,则可能会在测试后收集 ClassLoader 及其类。

关于Javassist:重新创建一个类 - 先删除,还是 defrost() 然后修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17323300/

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