方法重载:Java 对重写等效方法的限制
Java 禁止类中存在两个具有相同擦除的方法,尽管参数不同类型。此限制源于该语言努力保持与利用原始类型的遗留代码的兼容性。
当两个具有不同参数类型的方法(例如 add(Set
存在此限制是为了避免类使用原始方式从超类继承的情况下发生冲突类型。在这种情况下,编译器必须将原始类型视为与泛型类型等效的重写,以确保正确的方法重写。
例如,考虑使用原始类型使用 toList(Collection c) 方法的遗留类 CollectionConverter。如果您扩展此类并添加一个新方法 toList(Collection
但是,如果您稍后错误地添加第三个方法 toList(集合 c) 到子类,编译器面临歧义,因为它无法确定要重写哪个方法。为了解决这种歧义,Java 针对多个重写等效方法强制执行规则。
值得注意的是,此限制不是擦除的限制,而是为了支持与现有代码的兼容性而做出的设计选择。通过将泛型添加到方法标识符中,可以在编译时确保唯一性,而无需此规则。尽管如此,Java 为了兼容性还是保留了这个限制。
以上是为什么 Java 使用等效方法来限制方法重载?的详细内容。更多信息请关注PHP中文网其他相关文章!