리플렉션을 사용하여 필드 값을 얻는 데 도움이 필요합니다. 서버 소켓 구현 클래스 (SocketTest.class)가 있으며 소켓 기능이 정상적으로 작동합니다. 이 클래스의 소켓 필드를 잡으려고 노력 중이며 getInputStream() 메서드를 호출하여 입력을 허용하려고합니다. 다음 코드는 나에게 IllegalArgumentException
주고있다 - 즉 클래스 String
를 나타내는 Class
반환하는의 String
예를 "SocketTest"
에 getClass()
를 호출합니다 표현 "SocketTest".getClass()
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의 기존 인스턴스가 필요하다고 생각했습니다. 새로운 인스턴스를 사용하면 새로운 소켓 연결 (사용자가 연결되는 곳이 아닌)을 얻을 수 있습니다. –