如果不能从上下文推断出t,函数返回t或object有关系吗?

tuwxkamq  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(328)

我在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函数声明返回对象还是返回t有关系吗?至少据我所知,如果t不能由函数参数推断出来,它就完全充当了object。那么为什么源代码使用t而不是对象呢?

kuhbmx9i

kuhbmx9i1#

不会再回来了 Object 但是从上下文推断出的类型,或者——如果不可能——通过传递带有类型见证的类型参数: YourClass.<String>fromJson() 请注意,这不会神奇地工作。如果从内部调用返回的对象与 T 在运行时,(外部返回值的)赋值将抛出 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
        }
    }
}

相关问题