Отражение Java: доступ к закрытому методу внутри внутреннего класса - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблемы с использованием закрытого метода внутри закрытого класса внутри открытого класса с использованием API-интерфейса отражений.Вот упрощенный пример кода:

public class Outer {
    private class Inner {
        private Integer value;

        private Inner() {
            this(0);
        }
        private Inner(Integer y) {
            value = y;
        }

        private Integer someMethod(Integer x) {
            return x * x;
        }
    }
}

Опять же, я хочу иметь возможность создать экземпляр объекта класса Outer, а затем вызвать someMethod из частного класса Inner.Я пытался сделать это с помощью отражений, но, похоже, я не могу пройти дальше 1 уровня. Кроме того, внутренний класс может иметь или не иметь конструктор, который, кажется, использует большинство кода.Приведенный выше код является просто фреймворком.

Мой текущий код:

Outer outerObject = new Outer();
Constructor<?> constructor = innerNodeClass.getDeclaredConstructor(Outer.class);
constructor.setAccessible(true);
Object innerObject = constructor.newInstance(outerObject);
innerObject.someMethod(5)

Я искал различные способы, чтобы добраться до внутреннего класса или частного метода, но не могу найти способполучить внешний объект к внутреннему объекту без использования конструктора.Меня интересует только использование закрытого метода во внутреннем классе для элемента во внешнем объекте.

1 Ответ

0 голосов
/ 27 сентября 2018

Получив экземпляр внутреннего объекта, вы можете использовать отражение для вызова самого метода:

Method someMethod = innerObject.getClass().getDeclaredMethod("someMethod", Integer.TYPE);
someMethod.setAccessible(true);
someMethod.invoke(innerObject, 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...