Другим способом было бы иметь функцию в качестве параметра метода.Это решение основано на этом, так как значение, которое вы получаете от пользователя в качестве ввода, может обрабатываться как строка, а затем нам нужна функция, которая преобразует строку в нужный тип.
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);
В этом случае могут быть определены разные функции для преобразования в каждый поддерживаемый тип.