函数 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
        }
    }
}