Мне нужна помощь в получении значения поля с использованием отражения. Существует класс (SocketTest.class), который имеет реализацию сокета сервера, функциональность сокета работает нормально. Я пытаюсь получить поле сокета этого класса, и я намерен вызвать его метод getInputStream() для принятия входов. Следующий код дает мне IllegalArgumentException
- Can not set java.net.Socket field com.test.SocketTest.socket to java.lang.Class
Получение исключения при получении значения поля с использованием отражения
Field socketField = SocketTest.class.getDeclaredField("socket");
socketField.setAccessible(true);
Class<?> socketTest = "SocketTest".getClass();
Socket socket = (Socket)socketField.get(socketTest);
Спасибо, Холгер. Я понимаю, что в этом случае мне нужно передать экземпляр SocketTest в качестве параметра для получения метода. Поскольку SocketTest.class не будет возвращать экземпляр, есть ли способ получить существующий экземпляр (если в классе SocketTest не могут быть внесены изменения). –
Нет такой возможности поиска существующего экземпляра. Даже не понятно, почему вы предполагаете, что существует существующий экземпляр вообще. Как насчет создания экземпляра? – Holger
Во время выполнения SocketTest создаст соединение сокета на определенном порту. Поэтому я думал, что для получения входного потока этого сокета мне понадобится существующий экземпляр SocketTest. С новым экземпляром я получаю новое соединение сокетов (не там, где будет подключен пользователь). –