为什么这个通用代码可以在Java 8中编译?

10 浏览
0 Comments

为什么这个通用代码可以在Java 8中编译?

我偶然发现了一段让我感到奇怪的代码,它竟然能够成功编译:

public class Main {
    public static void main(String[] args) {
        String s =  newList(); // 为什么这行代码能编译通过?
        System.out.println(s);
    }
    private static > T newList() {
        return (T) new ArrayList();
    }
}

有趣的是,如果我修改方法`newList`的签名为`>`,它就不再工作了。

评论和回应后的更新:

如果我将方法中的泛型类型移动到类中,代码就无法编译了:

public class SomeClass> {
    public  void main(String[] args) {
        String s = newList(); // 这段代码不再编译通过
        System.out.println(s);
    }
    private T newList() {
        return (T) new ArrayList();
    }
}

0