根据我的理解,java中的以下通用函数:
public static <T> T f(T x) {
Integer[] arr = new Integer[4];
T ret = (T) arr[2];
return ret;
}
编译为以下形式(因为它是无界的):
public static Object f(Object x) {
Integer[] arr = new Integer[4];
Object ret = (Object) arr[2];
return ret;
}
但是,当我运行以下语句时,编译器能够确定返回值是整数类型。编译器是如何计算出来的?
Integer i = f(new Integer(4));
为了使上述语句起作用,该函数不应该写成如下吗?
public static <T extends Integer> T f(T x) {
Integer[] arr = new Integer[4];
T ret = (T) arr[2];
return ret;
}