函数 returns T 或对象 if T 不能从上下文中推断出来有关系吗?
Does it matter if function returns T or object if T can not be inferred from context?
我在gson中找到了以下源代码:
public <T> T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException
{
JsonReader jsonReader = newJsonReader(json);
T object = (T) fromJson(jsonReader, typeOfT);
assertFullConsumption(object, jsonReader);
return object;
}
如果 fromJson 函数声明为 return 一个 Object 或 return T?至少据我所知,如果 T 不能通过函数参数推断出来,它就完全充当对象。
那么为什么源代码使用 T 而不是 Object?
这不是 return Object
而是从上下文推断的类型,或者 - 如果不可能 - 通过传递带有 type witness 的类型参数:YourClass.<String>fromJson()
请注意,这不会神奇地起作用。如果从内部调用 returned 的对象在运行时与 T
不兼容,则(外部 return 值的赋值)将抛出 ClassCastException
.
示例:
public class MyClass {
public static void main(String args[]) {
String result1 = MyClass.test(); // works as expected
Object result2 = MyClass.<Integer>test(); // works "surprisingly"
int result3 = MyClass.test(); // cannot be cast to java.lang.Integer
}
static <T> T test() {
try {
return (T) "Hello World";
} catch (ClassCastException e) {
throw new Error(); // never reached
}
}
}
我在gson中找到了以下源代码:
public <T> T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException
{
JsonReader jsonReader = newJsonReader(json);
T object = (T) fromJson(jsonReader, typeOfT);
assertFullConsumption(object, jsonReader);
return object;
}
如果 fromJson 函数声明为 return 一个 Object 或 return T?至少据我所知,如果 T 不能通过函数参数推断出来,它就完全充当对象。 那么为什么源代码使用 T 而不是 Object?
这不是 return Object
而是从上下文推断的类型,或者 - 如果不可能 - 通过传递带有 type witness 的类型参数:YourClass.<String>fromJson()
请注意,这不会神奇地起作用。如果从内部调用 returned 的对象在运行时与 T
不兼容,则(外部 return 值的赋值)将抛出 ClassCastException
.
示例:
public class MyClass {
public static void main(String args[]) {
String result1 = MyClass.test(); // works as expected
Object result2 = MyClass.<Integer>test(); // works "surprisingly"
int result3 = MyClass.test(); // cannot be cast to java.lang.Integer
}
static <T> T test() {
try {
return (T) "Hello World";
} catch (ClassCastException e) {
throw new Error(); // never reached
}
}
}