我需要使用反射獲取字段值的幫助。有一個類(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);
謝謝Holger。我明白,在這種情況下,我需要傳遞一個SocketTest實例作爲參數來獲取方法。由於SocketTest.class不會返回實例,那麼是否有任何方法來獲取現有實例(考慮到在SocketTest類中不能進行更改)。 –
沒有這樣的「搜索現有實例」功能。你甚至不知道你爲什麼假設,有一個現存的實例。怎麼樣創建一個實例? – Holger
在運行時,SocketTest會在特定的端口上創建套接字連接。所以我在想,爲了獲得該套接字的輸入流,我需要現有的SocketTest實例。用新的實例,我會得到新的套接字連接(不是用戶將連接的地方)。 –