小编use*_*059的帖子

奇怪的JDK行为,应该编译吗?

import java.util.*;

public class Main <T> {

    public void guru(List<Integer> list) {
        System.out.println("INteger");
   }

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        new Main().guru(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,调用

guru(List<String>); //no type erasure during compiling...
Run Code Online (Sandbox Code Playgroud)

应该导致编译失败.

如果我们用以下方法创建对象会发生什么:

new Main<Integer>() //or any other type
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里发生了什么?这是JDK中的错误或没有参数实例化参数化对象可能会导致这样的问题,为什么?

我可以补充说,如果我们将主要定义更改为:

public class Main {
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,编译失败了.

java generics compilation

2
推荐指数
1
解决办法
69
查看次数

标签 统计

compilation ×1

generics ×1

java ×1