java.lang.IllegalAccessError: tried to access field ConcreteEntity.instance from class Entityjava.lang.IllegalAccessError: próbowano uzyskać dostęp do pola ConcreteEntity.instance z klasy Entity
Ok, więc tu jest umowa. Próbuję uzyskać dostęp do ConcreteEntity.instance
, który jest polem z domyślnym typem dostępu, który znajduje się w domyślnym ClassLoader
, a Entity.getInstance
jest metodą istniejącą u dziecka ClassLoader
.
Pamiętaj, że obie są w tej samej paczce, jednak zostanie przesłana IllegalAccessError
. Czy istnieje rozwiązanie tego problemu, które nie wymaga załadowania klasy Entity wewnątrz tego samego ClassLoader
jako ConcreteEntity
?
0 new #14 <Entity>
3 dup
4 aload_0
5 invokevirtual #18 <Adapter.getInstance>
8 checkcast #20 <sl>
11 getfield #24 <sl.d>
14 invokespecial #25 <Entity.<init>>
17 areturn
Kod bajtowy pobrany przez jclasslib w przypadku wygenerowania wyjątku "Po kompilacji".
Dziękuję Gamb za oczyszczenie postu.
Czy modyfikowania klas w czasie wykonywania przy użyciu jakiś kompilator kodu bajtowego? –
Tak, jestem. Ale zmanipulowany kod bajtowy jest bezbłędny. – Justin
Czy próbujesz uzyskać dostęp do pola podklasy wewnątrz superklasy? Myślę, że to nie jest dozwolone. –