powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов приватного метода суперкласса из инстанса расширенного класса через рефлексию
4 сообщений из 4, страница 1 из 1
Вызов приватного метода суперкласса из инстанса расширенного класса через рефлексию
    #39631867
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.

Есть родитель:
Код: java
1.
2.
3.
4.
5.
class A {
   private void m() {
      System.out.println("opa");
   }
}



И детя:
Код: java
1.
class B extends A {}



Детя передается в спец. интрумент, в универсальный метод для определенных махинаций:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
public <T extends A> T go(Class<T> type, Object...params) {
   
   T e = type.newInstance();

   // тут мне надо вызвать метод m() из суперкласса
   // делаю так:
   Method init = e.getClass().getSuperclass().getDeclaredMethod("m");
   init.setAccessible(true);
   init.invoke();

   return e;
}
...



Орет:
Код: java
1.
2.
3.
4.
5.
6.
7.
SEVERE: null
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
и т.д....



Ошибку я понял. Но задача осталась.
А также осталось понять, есть ли альтернативное решение - вызова приватного метода суперкласса или НЕТ?

Если сделать метод m() публичным, то так у меня получилось:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
...
public <T extends A> T go(Class<T> type, Object...params) {
   
   T e = type.newInstance();
   e.m();
   return e;
}
...



Но соль в том, что метод должен быть приватным! (
...
Рейтинг: 0 / 0
Вызов приватного метода суперкласса из инстанса расширенного класса через рефлексию
    #39631876
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
))
Закон подлости! 2 дня промучался, задал вопрос сюда и сам, через 5 мин нашел ответ в инете))
...
Рейтинг: 0 / 0
Вызов приватного метода суперкласса из инстанса расширенного класса через рефлексию
    #39631877
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
public <T extends A> T go(Class<T> type, Object...params) {
   
   T e = type.newInstance();

   // тут мне надо вызвать метод m() из суперкласса
   // делаю так:
   Method init = e.getClass().getSuperclass().getDeclaredMethod("m");
   init.setAccessible(true);
   init.invoke(e);

   return e;
}
...
...
Рейтинг: 0 / 0
Вызов приватного метода суперкласса из инстанса расширенного класса через рефлексию
    #39631879
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

По идее вы должны указать экземпляр класса параметром в invoke.
Так как вы пытаетесь вызвать метод, который не знает к какому экземпляру класса он принадлежит
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов приватного метода суперкласса из инстанса расширенного класса через рефлексию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]