我需要帮助才能使用反射来获取字段的值。有一个类(SocketTest.class)有服务器套接字实现,套接字功能正常。我试图抓住这个类的socket字段,我打算调用它的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);
答案 0 :(得分:0)
表达式"SocketTest".getClass()
将在getClass()
实例String
上调用"SocketTest"
,该实例将返回代表类Class
的{{1}},换句话说,相当于表达式String
。
然后,不清楚为什么要将String.class
对象传递给Class
的{{1}}方法。 get
方法应该读取字段,因为这是在类Field
中声明的字段,它需要get
的实例,而不是SocketTest
实例, SocketTest
也Class
。但是,如果该字段为SocketTest.class
,则您根本不需要传递任何内容,只需使用String.class
。
通常,您应该重新考虑您的设计。如果班级static
封装了socketField.get(null)
个实例,则最多可以SocketTest
分发Socket
,如果需要,如果不考虑为了打败封装,否则,你不应该试图用反射来抵消这个设计决定。