2012-05-23 10 views
6

Mam klasy Java podobny do następującego:Making klasy Javy nieostatecznej pośrednictwem refleksji API

public final class Node { 
    public Node() {} 
} 

nauczyłem już jak zmienić zmienić dostępności pól „ostateczny” za pośrednictwem refleksji API ale czy jest to również możliwe w przypadku zajęć? Czy mogę przekształcić ostatnią lekcję w klasę nie finalną w czasie wykonywania?

Odpowiedz

4

Możesz ponownie napisać plik klasy używając biblioteki takiej jak ASM.

Może wystąpić brak zmiany statusu klasy final w środowisku wykonawczym, ponieważ podczas kompilacji musi być nieostateczny podczas kompilacji podklasy.

+3

Nie wiem, jaki był przypadek użycia user982247, ale próba proxy obiektu jest jednym z powodów, dla których ktoś mógłby chcieć zmienić klasę na wersję nie finalną w środowisku wykonawczym, bez problemów z kompilacją. –

1

Nie widzę, jak to zadziała, ponieważ kompilator sprawdzi, czy klasa, którą próbujesz utworzyć, nie będzie ostateczna podczas kompilacji. Otrzymasz błąd, jeśli spróbujesz go odziedziczyć.

Myślę, że dobrze jest zadać pytanie, jeśli jesteś ciekawy, ale głównym pytaniem jest to, dlaczego chcesz to zrobić? Odbicie pozwala robić wiele rzeczy, aby ominąć końcowe, prywatne itp., Ale to nie znaczy, że to dobry pomysł. Gdyby projektant biblioteki trzeciej strony uważał, że finał jest dobrym pomysłem, dobrze byłoby go uszanować.

Powiązane problemy