【发布时间】:2019-10-21 22:44:12
【问题描述】:
我花了很多时间学习 Java 的通用特性。我试图阅读以下链接中的解释:https://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html,我不明白,也试图通过论坛的以下链接来理解这个问题:Java Type Erasure: Rules of cast insertion?,但事情还远未弄清楚我,我还添加了评论,但我怀疑是否有人会引用评论,因为帖子很旧。
我试图了解编译器在进行擦除时如何知道为方法返回类型进行的转换。在我正在学习的书中(Deital - Java How to Program),我认为解释中的某些内容丢失了(可能是错字)。那里写着:“在每种情况下,返回值的类型转换都是从特定方法调用中的方法参数的类型推断出来的,因为根据方法声明, 返回类型和参数类型匹配。 据我理解这句话,它说演员表是根据调用方法时发送的参数。但是如果方法没有得到任何参数。例如,如果方法原型是:
public static <T extends Animal> T funcA ()
现在有 3 种不同的方法调用该函数。一个想要得到一个返回类型的 Dog (Dog d = funcA()),第二个想要得到 Cat (Cat c = funcA()),最后一个想要得到 Animal (Animal A = funcA())。
擦除如何决定制作哪个演员表?
【问题讨论】:
标签: java generics casting type-erasure