我使用Javassist创建一个类。而在一个测试套件,当第二个测试试图创建相同的类,它在pool.makeClass(...)
失败,因为该类被冻结(即已经通过toClass()
创建。Javassist:重新创建一个类 - 先删除,或解冻()并修改?
什么是克服这种方式?理想的情况下,第一个试验应删除类不知何故 - 也许从类加载器卸载 - 但只要我阅读in JLS,卸载操作是不可靠的
因此,也许解决办法是在类创建代码是否存在来检查,如果确实如此,defrost()
它,删除所有成员等,并重新创建它。
任何其他的想法?
或者是否有一些可靠的方法通过Javassist删除类?
从'ClassLoader'卸载并非不可靠 - 这是不可能的。如果一个类*和*它的'ClassLoader'变得不可访问,那么一个类可能会被卸载,但是因为每个类引用了它的加载器,这意味着这个加载器加载的所有类都必须变得无法访问。但是你可以(重新)使用*不同的''ClassLoader'创建类。那么,从形式上来说,它是一个不同的类,然后同名(也可能是相同的字节码)。 – Holger
这似乎是答案...如果你这样说,我会接受。 –