私はクラスを作成するためにJavassistを使用します。そして、テストスイート、第二の試験は、同じクラスを作成しようとすると、クラスが凍結されているので、それはpool.makeClass(...)
で失敗した(すなわち、すでにtoClass()
を使用して作成。Javassist:クラスの再作成 - 最初に削除するか、または除外()して変更しますか?
に最初のテストがすべき、理想的には?これを克服する方法は何何とかクラスを削除する - おそらくクラスローダーからアンロード - 。しかし、私はin JLSを読んで、アンロード操作は信頼できません
ので、おそらくこの問題を回避するには、それが存在するかどうかをクラスの作成コードをチェックインすることであり、それがない場合には、defrost()
すべてのメンバーなどを削除して再作成してください。
他のアイデア?
また、Javassistを使用して確実にクラスを削除する方法はありますか?
「ClassLoader」からのアンロードは信頼性がありません。不可能です。 ClassLoaderが到達不能になったが、すべてのクラスがこのローダを参照しているので、このローダによってロードされたすべてのクラスが到達不能になっている必要があることを意味するので、クラスはアンロードできます。しかし、別の* ClassLoaderを使ってクラスを(再)作成することはできます。正式には、正式には同じ名前(同じバイトコード)の別のクラスです。 – Holger
それは答えと思われる...あなたがそれを置くなら、私は受け入れるだろう。 –