我正在尝试创建一个Java方法,该方法接受一个对象类型以及应将其转换为的数据类型。
例如,如果我应该能够根据需要返回值1作为Int或Double。我正在使用Class传递数据类型作为参数。
问题: 如何使方法泛型以接受基于输入参数的返回类型?
下面的代码仅是示例,在语法上可能是错误的,并被提供来解释我的问题。
public class JavaTest {
public static void main(String[] args) {
getValue(1,int.class);
getValue(1,double.class);
getValue("adf",String.class);
}
public static <E> void getValue(Object obj,Class<?> type) {
if (type == String.class) {
// return string value
}else if (type == int.class) {
//return Integer.parseInt(obj);
}else if (type == double.class) {
//return Double.parseDouble(obj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何使方法泛型以接受基于输入参数的返回类型?
type参数可用于指定方法的返回类型,并且可以Class通过该参数的type参数将其与参数关联:
public static <E> E getValue(Object obj, Class<E> type) {
Run Code Online (Sandbox Code Playgroud)
您还需要使用Class.cast()来使编译器满意,该方法返回正确的类型。(您也可以使用普通的强制类型转换,但是会受到类型安全警告的约束。)例如:
// ...
} else if (type == Integer.class) {
return type.cast(Integer.valueOf(obj.toString()));
}
Run Code Online (Sandbox Code Playgroud)
还请注意,您的代码建议您尝试这样做,因此您不能以这种方式直接实现向原始类型的转换。您必须改为转换为其包装器类。换句话说,你不能使用int.class,double.class,等。您必须改为使用Integer.class,Double.class等等。