Метод, который возвращает любой тип в Java - PullRequest
0 голосов
/ 22 ноября 2018

Я учусь в 11 классе по информатике и пытаюсь написать файл, который сильно упрощает код.Сейчас я пытаюсь объединить ввод и вывод в один метод;

public static void askln(String text, String type){
     System.out.println(text);
     if(type.equals("int"))
          return getInt();
     if(type.equals("char"))
          return getChar();
     if(type.equals("String")) 
          return getString();
     if(type.equals("double"))
         return getDouble();
     if(type.equals("float"))
         return getFloat();
     if(type.equals("long")) 
         return getLong();
}

getInt() - это метод, который получает целое число от пользователя.Я предполагаю, что люди поймут, что делают другие получатели.

Этот код не работает, потому что 'void' ничего не вернет. Мне было интересно, был ли тип возвратаэто позволило бы мне вернуть любое значение.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Другим способом было бы иметь функцию в качестве параметра метода.Это решение основано на этом, так как значение, которое вы получаете от пользователя в качестве ввода, может обрабатываться как строка, а затем нам нужна функция, которая преобразует строку в нужный тип.

public static <R> R askln(String text, Function<String, R> function){
    System.out.print(text);
    String str = getValue();
    return function.apply(str);
}

Пример дляdouble

Function<String, Double> f = (Double::parseDouble);
Double d = askln("Type a number ", f);

и целое число

Function<String, Integer> f2 = (Integer::parseInt);
Integer i = askln("Type an integer", f2);

В этом случае могут быть определены разные функции для преобразования в каждый поддерживаемый тип.

0 голосов
/ 22 ноября 2018

Вам следует поменять параметр String type на Class<T> type и тип возврата на T.Вы должны определить общий параметр непосредственно перед возвращаемым значением, поэтому сигнатура будет выглядеть следующим образом: public static <T> T askln(String text, Class<T> type).

Чтобы сделать ваш компилятор счастливым, вы, вероятно, должны иметь методы getXXX(), возвращающие Object и приведениеэто при возврате к T.

...