我需要帮助来使用反射来获取字段的价值。有一个类(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".getClass()
将getClass()
在String
实例上调用,实例"SocketTest"
将返回Class
表示该类的类String
,换句话说,它等效于expression String.class
。
然后,不清楚为什么将Class
对象传递给的get
方法Field
。该get
方法应该读取该字段,并且由于这是在类中声明的字段SocketTest
,因此它需要的实例SocketTest
,而不是Class
实例,SocketTest.class
也不需要String.class
。但是,如果该字段为static
,则您根本不需要传递任何内容,则可以使用socketField.get(null)
。
通常,您应该重新考虑您的设计。如果该类SocketTest
封装了一个Socket
实例,则SocketTest
需要分发一个InputStream
,如果需要的话,并且如果不认为这样做会破坏封装,那么,您不应尝试使用Reflection抵消该设计决策。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句