返回Java中任何类型的方法

时间:2018-11-22 18:51:02

标签: java return-type

我正在上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 :(得分:3)

您应该将参数String type交换为Class<T> type,并将返回类型交换为T。您必须在返回值之前定义一个通用参数,因此签名如下:public static <T> T askln(String text, Class<T> type)

为了使您的编译器满意,您可能应该使getXXX()方法返回Object并在返回T时强制转换它。

答案 1 :(得分:1)

另一种方法是将函数作为方法的参数,该解决方案基于以下事实:由于您从用户那里获得了值,因此输入可以作为字符串处理,然后我们需要一个函数来转换字符串到所需的类型。

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

双人间的例子

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);

然后您可以定义不同的功能,以转换为每种受支持的类型。