Я пытаюсь разрешить пользователю вызывать любой метод на сервере, используя сокеты и рефлексию. Клиент уже знает имена методов и количество параметров, но не фактические типы параметров.
Каждый метод на сервере принимает 0 или более примитивных аргументов (включая строки) и возвращает примитив. Я принимаю данные от пользователя в клиенте с помощью сканера, поэтому все является строкой, и я использую .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);
И затем я отправляю результат (который является объектом) обратно клиенту, и он распечатывает его.