java如何威胁泛型编程?

java如何威胁泛型编程?,java,generics,Java,Generics,我对Java中的泛型编程有疑问 当C++编译器在代码中创建对泛型函数/对象模板的引用时,它将创建一个函数,该函数使用它所遇到的任何类型的非泛型具体类型。 我不知道它在Java中是如何工作的。Javac行为与C++编译器相同吗?还是在运行时由JVM管理 谢谢Java中的泛型纯粹是一种编译时构造,用于确保类型安全性-它们被编译器删除,并由原始等价物替换,但保证安全,除非您专门铸造以使该类型安全性无效 这是一种相对简洁的实现泛型的方法,因为不需要对VM或热点进行任何修改,只需要对编译器进行修改。除了运

我对Java中的泛型编程有疑问

当C++编译器在代码中创建对泛型函数/对象模板的引用时,它将创建一个函数,该函数使用它所遇到的任何类型的非泛型具体类型。 我不知道它在Java中是如何工作的。Javac行为与C++编译器相同吗?还是在运行时由JVM管理


谢谢

Java中的泛型纯粹是一种编译时构造,用于确保类型安全性-它们被编译器删除,并由原始等价物替换,但保证安全,除非您专门铸造以使该类型安全性无效

这是一种相对简洁的实现泛型的方法,因为不需要对VM或热点进行任何修改,只需要对编译器进行修改。除了运行时没有可用的泛型类型信息这一明显的限制外,它偶尔也会造成泛型自由实例也必须有意义的限制。例如,如果我想做以下事情:

public class CompareMe implements Comparator<Thing>, Comparator<OtherThing> {

    public int compareTo(Thing other) {
        //Blah
    }

    public int compareTo(OtherThing other) {
        //Blah
    }
}

…很明显,这里有一个名字冲突的问题!当然,这可以使用单个比较器重新编写,也可以使用传递了自定义比较器的compareTo方法,但值得注意。

编译前Java生成转换类型的代码。java还用于获取正确的类型。例如:

List <Integer> mylist = new ArrayList<Integer>();
i.add(someInt);
今天,编译器需要知道mylist的类型元素并自行添加整数。结果你只写了它:

Integer valI = mylist.get(index);

Java具有类型擦除功能。Java使用它可以安全使用的最通用的具体类型。它通常是对象,除非对可以使用的类型提出某种要求
Integer valI = (Integer)mylist.get(index);
Integer valI = mylist.get(index);