Ich brauche Hilfe, um den Wert eines Feldes mit Reflektion zu erhalten. Es gibt eine Klasse (SocketTest.class), die eine Server-Socket-Implementierung hat, die Socket-Funktionalität funktioniert gut. Ich versuche, ein Socket-Feld dieser Klasse zu erhalten, und ich beabsichtige, die Methode getInputStream() aufzurufen, um Eingaben zu akzeptieren. Folgenden Code gibt mir IllegalArgumentException
- Can not set java.net.Socket field com.test.SocketTest.socket to java.lang.Class
Exception erhalten, während Wert eines Feldes mit Hilfe der Reflektion erhalten wird
Field socketField = SocketTest.class.getDeclaredField("socket");
socketField.setAccessible(true);
Class<?> socketTest = "SocketTest".getClass();
Socket socket = (Socket)socketField.get(socketTest);
Danke Holger. Ich verstehe, dass ich in diesem Fall eine Instanz von SocketTest als Parameter übergeben müsste, um die Methode zu erhalten. Da SocketTest.class keine Instanz zurückgibt, gibt es eine Möglichkeit, eine vorhandene Instanz zu erhalten (in der SocketTest-Klasse können keine Änderungen vorgenommen werden). –
Es gibt keine solche "Suche nach einer vorhandenen Instanz" -Funktion. Es ist nicht einmal klar, warum Sie annehmen, dass es überhaupt eine existierende Instanz gibt. Was ist mit dem Erstellen einer Instanz? – Holger
Zur Laufzeit würde SocketTest eine Socket-Verbindung an einem bestimmten Port erstellen. Also dachte ich mir, dass ich eine vorhandene Instanz von SocketTest benötigen würde, um einen Eingabestream dieses Sockets zu erhalten. Mit einer neuen Instanz würde ich eine neue Socket-Verbindung erhalten (nicht dort, wo der Benutzer verbunden wäre). –