在使用反射获取字段值时获取异常



我需要帮助来使用反射获取字段的值。有一个类(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()将在String实例上调用getClass() "SocketTest" ,这将返回表示类StringClass,换句话说,等价于表达式String.class

然后,不清楚为什么要将Class对象传递给Fieldget方法。get方法应该读取字段,并且由于这是在类SocketTest中声明的字段,因此它需要一个SocketTest的实例,而不是Class实例,既不SocketTest.class也不String.class。但是,如果字段static,则根本不需要传递任何内容,只需使用socketField.get(null)即可。

通常,您应该重新考虑您的设计。如果类SocketTest封装了一个Socket实例,则由SocketTest来分发一个InputStream,如果需要,并且如果这不被认为会破坏封装,否则,您不应该尝试使用 Reflection 来抵消此设计决策。

相关内容

  • 没有找到相关文章

最新更新