Używam Javassist do stworzenia klasy. A w pakiecie testowym, gdy drugi test próbuje utworzyć tę samą klasę, nie powiedzie się na pool.makeClass(...)
, ponieważ klasa jest zamrożona (tj. Już utworzona przez toClass()
. usunąć klasę jakoś - może wyładować z classloader. - ale jak czytam in JLS operacja wyładowania nie jest niezawodnyJavassist: ponowne utworzenie klasy - usunąć pierwsze lub odszraniać() i modyfikować?
Więc być może rozwiązaniem jest sprawdzić w klasie tworzenia kodu, czy istnieje, a jeśli tak, to defrost()
usuń wszystkich członków itp. i ponownie je stwórz.
Jakieś inne pomysły?
Czy jest jakiś niezawodny sposób na usunięcie klasy przez Javassist?
Rozładowanie z 'ClassLoadera' nie jest niewiarygodne - niemożliwe. Klasa może zostać rozładowana, jeśli * i * jej 'ClassLoader' stanie się nieosiągalna, ale ponieważ każda klasa odwołuje się do jej programu ładującego, co oznacza, że * wszystkie * klasy ładowane przez ten program ładujący również musiały stać się nieosiągalne. Ale możesz (re) stworzyć klasę używając * innego * 'ClassLoader'. Cóż, formalnie jest to inna klasa o tej samej nazwie (i może ten sam kod bajtowy). – Holger
To wydaje się być odpowiedzią ... jeśli to ułożysz, zaakceptuję. –