Nie można uzyskać dostępu do chronionego elementu superklasy z tego samego pakietu w innym słoiku

Mam dziwny problem, którego nie mogę zrozumieć, kiedy pojawił się podczas próby wtyczki mojego programu. Dodatkowym problemem jest to, że nie jestem w stanie stworzyć prostego przypadku testowego, ponieważ za każdym razem, gdy próbuję, działa. Brakuje mi jakiejś komplikacji. Ale postaram się opisać sytuację tak jasno, jak to możliwe, na wypadek, gdyby ktoś to brzmiał znajomo.

Mam klasę bazową o nazwie Seed, która jest częścią głównej aplikacji i jest ładowana przez program ładujący klasy. Mam wtyczkę zawierającą klasę Road, która jest podklasą Seed. Jest ładowany w czasie wykonywania z oddzielnego pliku jar. Droga klasy odnosi się do pola Seed.garden, które jest zdefiniowane jako:

chroniony końcowy ogród ogrodowy;

Zauważ, że nie otrzymuję błędów kompilacji. Nie otrzymuję także błędów środowiska wykonawczego, gdy jar wtyczki jest dołączony do ścieżki klasy systemu. Dopiero gdy moja główna aplikacja ładuje wtyczkę za pomocą nowego programu ładującego klasy (który ma program ładujący klasy jako nadrzędny), otrzymuję błąd. Błąd jest:

java.lang.IllegalAccessError: próbowałem uzyskać dostęp do pola package.Seed.garden z pakietu class.Road 4 USD

Musi mieć coś wspólnego z faktem, że podklasa została załadowana przez inny program ładujący klasy niż superklasa, ale nie mogę znaleźć żadnego oficjalnego powodu, dla którego nie miałoby to działać. Ponadto, jak powiedziałem, gdy próbuję odtworzyć problem za pomocą prostego przypadku testowego (który obejmuje oddzielne słoiki, ładowanie podklasy innym programem ładującym klasy itp.), Nie otrzymuję błędu.

Nie wydaje się również prawdopodobne, że naruszam reguły dostępu, ponieważ działa, gdy klasy są ładowane przez ten sam program ładujący klasy i nie otrzymuję błędów kompilacji.

Nie mam pomysłów! Czy ktoś rozpoznaje ten problem lub ma dla mnie wskazówki dotyczące wskazówek, w jaki sposób szukać? Wsparcie!

questionAnswers(4)

yourAnswerToTheQuestion