尝试使用反射调用方法并自动解析输入

  • 本文关键字:方法 反射 调用 java reflection
  • 更新时间 :
  • 英文 :


我试图允许用户使用套接字和反射在服务器上调用任何方法。客户端已经知道方法名称和参数数量,但不知道实际的参数类型。

服务器上的每个方法都接受0个或多个基本参数(包括字符串)并返回一个基本参数。我正在使用Scanner从客户端中的用户获取输入,因此所有内容都是字符串,并且我使用.split(" ")来分隔参数。

如何在服务器上自动将这些字符串解析为正确的类型(int, double, boolean, char等)?

这是我目前在服务器上做的事情。clientOutput和clientInput是套接字上的ObjectOutputStream和ObjectInputStream, m是我调用的方法。

Class<?>[] parameterTypes = m.getParameterTypes();
clientOutput.writeObject(parameterTypes.length);
clientOutput.flush();
Object[] parameters = (Object[]) clientInput.readObject();
for (int i = 0; i < parameterTypes.length; i++) {
    //Some sort of if statement? Some way to handle booleans or chars?
    parameters[i] = NumberFormat.getInstance().parse((String) parameters[i]);
}
result = m.invoke(math, parameters);

然后我将结果(这是一个对象)发送回客户端,并将其打印出来。

当您遍历参数类型时,检查类名并相应地解析它。

                    for ( Class<?> c : paramTypes )
                            if ( "int".equals(c.getSimpleName() ) {
                                  // parse int
                            }
                            else if ("boolean".equals(c.getSimpleName() ) {
                                  // parse boolean
                            }
                     }

如果传入字符串中指示的方法通过反射解析为一个方法,则服务器肯定可以获得方法调用的参数类型,并将每个传入字符串解析为正确的类型。重载的方法可能有点麻烦:验证传入的字符串是否可解析,因为参数类型可以挑选出正确的方法。如果没有,则应该进行适当的错误处理或报告。

相关内容

  • 没有找到相关文章

最新更新