我正在尝试用 Java 编写一个具有混合返回类型的方法(就像你在 PHP 中一样)。
该方法应该采用简单的用户输入字符串,并使用泛型将其转换为适当的类型并返回该值。
@SuppressWarnings("unchecked")
public static <T> T askUser(String message, Class clazz) throws NumberFormatException {
// get the user input
String inputString = JOptionPane.showInputDialog(message),
className = clazz.getCanonicalName();
// return a Boolean, Integer or String
if (className.equals(Boolean.class.getCanonicalName())) {
return (T) Boolean.valueOf(inputString);
} else if (className.equals(Integer.class.getCanonicalName())) {
return (T) Integer.valueOf(inputString);
} else /*return the String*/ {
return (T) inputString;
}
}
我正在运行这样的代码:
String userName = name_game.<String>askUser("Please enter your name.", String.class);
Integer userAge = name_game.<Integer>askUser("Please enter your age.", Integer.class);
tellUser("So your name is %s and your age is %d...", userName, userAge);
Boolean confirm = name_game.<Boolean>askUser("Is this correct?", Boolean.class);
tellUser("You said %b.", confirm);
但我不知道如何在没有 (T) 强制转换的情况下让它工作,并且传递 Class 参数似乎也可以避免。
我怎样才能编写这种方法而不必求助于 (T) ?