通用方法返回类型

Aru*_*run 0 java generics generic-method

泛型方法返回类型是否基于值引用解析?例如

public class TestGenericMethod
{
    public static void main(String[] args)
    {
        TestGenericMethod dis = new TestGenericMethod();
        String str = dis.getFirst(singletonList("String"));
        System.out.println("| String  ==> " + str);

        Integer in = dis.getFirst(singletonList(5));
        System.out.println("| Integer ==> " + in);
    }

    private <T> T getFirst(List<Object> objs)
    {
        return (T) objs.get(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

参考代码片段,此代码编译并正常运行.我的问题在这里,因为我不是特定的类型转换列表对象到我的类型,仍然返回类型兼容StringInteger.那么返回类型是在值参考的基础上解决的吗?

JB *_*zet 5

返回类型由编译器根据您将结果赋给(str,in)的变量类型推断出来.

当然,返回值的实际类型将是列表的第一个对象的类型,并且您可以在运行时获得ClassCastException,因为您的代码不是类型安全的并且您忽略了通用转换是未选中的.试试这个例子

Integer oops = dis.getFirst(singletonList("hello"));
Run Code Online (Sandbox Code Playgroud)