![]() |
1
27
在扩展方法具有参数化参数的参数化类型时,编译器可以创建桥接方法。 你可以在这节课上找到 BridgeMethodResolver 一种获取“桥方法”引用的实际方法的方法。 见 Create Frame, Synchronize, Transfer Control : 作为这种情况的一个例子,考虑声明:
现在,给出一个调用
正在调用的实际方法的擦除,
只有程序发出未经检查的警告时,才会出现这种情况。( §5.1.9 ) 实现可以通过创建桥接方法来加强这些语义。在上面的示例中,将在类D中创建以下Bridge方法:
这是由Java虚拟机响应调用而实际调用的方法。
也见 Bridge : 如评论中所述,桥梁方法也需要 协变覆盖 :
通常,一种方法
|
![]() |
2
3
这里所示的例子(引用自JLS)听起来就像桥梁方法只在使用原始类型的情况下使用。由于情况并非如此,我想我将介绍一个示例,其中使用桥接方法来完全正确地输入泛型代码。 考虑以下接口和功能:
如果按以下方式使用此代码,将使用Bridge方法:
擦除后,
因此,当使用方法创建匿名类时
有趣的是,只有当类实现了
其他
与签名的接口
即使我有以下代码:
编译器仍然发出对
实际上还有另一种方法可以让编译器调用
|
![]() |
3
0
我偶然发现的另一个案例与仿制药无关:
|
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |