Java: Как проанализировать строку для различных указанных классов - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь реализовать многоразовый сканер с запятыми для консоли. Мои типы команд хранятся в перечислении, подобном этому, и имеют разные параметры:

HELP("help", "  * list all commands"),
EXIT("exit", "  * exit program"),
ADDI("addi", "<param1>  <param2>   * simple integer add ",int.class, int.class ),
ADDF("addf", "<param1>  <param2>   * simple float add ",float.class, float.class ),
ECHO("echo", "<param1>  <param2>   * echos param1 string param2 times ",String.class, int.class );

В моем классе CommandScanner мне нужен метод для анализа строки из CommandLine в указанный класс:

public Object parseString (String s, Class c) {
        //parse String to the specified Class and return it
    }

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Попробуйте:)

public static Object parseString (String s, Class<?> c) throws NoSuchMethodException, 
                        InvocationTargetException, IllegalAccessException {
    Method valueOf = c.getDeclaredMethod("valueOf", String.class);
    valueOf.setAccessible(true);
    return valueOf.invoke(c, s);
}
0 голосов
/ 26 апреля 2020

Вы оставили его довольно открытым, но давайте представим, что вы разбираете свои входные данные в параметры, так что теперь у вас есть параметр String и класс, который он представляет.

Если вы используете первичный класс типа I будет предлагать оператор переключения для делегирования.

String name = c.getName();
switch(name){
    case "int":
        return Integer.valueOf(s);
    case "float":
        return Float.valueOf(s);
    default:
        //grab a constructor that takes a string or 'valueOf' method.
}
...