Java中的通用参数类型和返回类型

Pur*_*rus 1 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 6

如何使方法泛型以接受基于输入参数的返回类型?

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.classdouble.class。您必须改为使用Integer.classDouble.class等等。