1
5
如果反编译
编译器创建这个方法是为了让类在类型擦除下工作;实际的工作方法是
正是这种桥方法实际上重写了基类中的方法。使用声明的方法
|
2
1
Java中的泛型是编译时类型的安全特性。因为它们是在版本1.5中引入的,所以它们必须与以前的版本向后兼容。这允许您使用原始类型——一个没有类型参数的变量,它引用一个具有类型参数的类。 在运行时,大多数类型参数信息都会被删除,但不是全部。在里面 this tutorial page about type erasure ,我们了解到编译器将在必要时插入强制转换。
在这里,编译器创建
桥梁法
要在运行时保留多态性,需要
当你打电话的时候
|
3
1
首先,您所做的只是提供对现有对象的引用,而不是创建新对象。
类型擦除后,您的Foo变为:
您的班级变成:
类型擦除后,方法签名不匹配。 因此,Bar set方法不实现Foo set方法。 为了解决这个问题并在类型删除后保留泛型类型的多态性,Java编译器生成一个桥接方法来确保子类型按预期工作。对于Bar类,编译器为set生成以下桥接方法:
https://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html |
4
0
事实证明,我的问题的答案是桥接方法。我目前正在读莫里斯·纳夫塔林(MauriceNaftalin)和菲利普·瓦德勒(PhilipWadler)的《Java泛型和集合》一书。实际上,我读了一节关于桥梁方法的内容,但我似乎没有仔细阅读。我很高兴所有的答案都有共同点。现在,我再去读一读那一节 |