我正在上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'不会返回任何内容。我想知道是否有一个返回类型可以让我返回任何值。
答案 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);
然后您可以定义不同的功能,以转换为每种受支持的类型。