[英]Generic Parameter Type and Return Type in Java
我正在尝试创建一个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);
}
}
}
如何使方法泛型以接受基于输入参数的返回类型?
type参数可用于指定方法的返回类型,并且可以通过该参数的type参数将其与Class
参数关联:
public static <E> E getValue(Object obj, Class<E> type) {
您还需要使用Class.cast()
来使编译器满意该方法返回正确的类型。 (您也可以使用普通的强制类型转换,但是会受到类型安全警告的约束。)例如:
// ...
} else if (type == Integer.class) {
return type.cast(Integer.valueOf(obj.toString()));
}
还要注意,您不能以这种方式直接实现到原始类型的转换,因为您的代码建议您尝试这样做。 您必须改为转换为其包装器类。 换句话说,您不能使用int.class
, double.class
等 。 您必须改为使用Integer.class
, Double.class
等。
public static void main(String[] args) {
int i= (int) getValue(10,int.class);
System.out.println("int value -->"+i);
Double d = (Double) getValue(25.023,double.class);
System.out.println("double d-->"+d);
String s=(String) getValue("adf",String.class);
System.out.println("String s-->"+s);
}
public static <T> Object getValue(Object obj,Class<?> type) {
return obj;
}
由于java方法只能返回一个结果,因此您必须做一些工作。 如您所知,您可以返回Object
。
如此处所述: 从Java中的方法返回不同类型的数据? 您可以使用两个具有不同类型的私有值来编写您的类,以便稍后询问设置了哪一个!
因此,将其应用于您的问题,您可以编写如下内容:
public class ReturningValues {
public final double y;
public final int x;
public ReturningValues(double y, int x) {
this.y = y;
this.x = x;
}
}
然后使用此类作为方法的返回值:
public static ReturnValues myMethod(){
ReturningValues rv = new ReturningValues(null,1);
return rv;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.