Tag: name clash

Java名称冲突错误,尽管方法签名不同

为了好玩,我正在尝试实现一个“MultiMap”集合,就像Apache Commons库中已经存在的那样。 我的“删除(K键,V值)”方法出现了一个有趣的错误。 编译器说有一个名称冲突 – 它与“类型Map的删除(对象,对象)”具有相同的擦除。 但是java.util.Map接口中没有定义这样的方法! 只有一个“remove(Object)”方法 – 带有一个参数,而不是我的两个参数版本。 更有趣的是,如果你通过用“删除(对象键,对象值)”替换我的“删除(K键,V值)”手动删除类型信息,它编译得很好。 有谁能解释这种现象? 我正在运行Java 8,以防万一。 import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MultiMap extends AbstractMap<K, Collection> { private Map<K, Collection> map; public MultiMap() { super(); map = new HashMap(); } //Fine public void clear(K key) { get(key).clear(); } //Fine […]

在重写generics类的方法时的名称冲突

我试图通过以下代码了解我得到的名称冲突错误: import java.util.*; import javax.swing.*; class Foo { public void doSomething(Number n, Map comps) { } } class Bar extends Foo { public void doSomething(Number n, Map comps) { } } 错误信息: 错误:名称冲突: Bar doSomething(Number,Map)和Foo中的doSomething(Number,Map)具有相同的擦除,但都没有覆盖其他 我知道我可以通过从Foo删除generics类型,或者通过将Bar声明更改为class Bar extends Foo来修复它; 我想知道的是为什么在特定情况下会发生此错误,但如果我从每个方法中删除comps参数就会消失。 我已经完成了关于类型擦除的一些阅读,但在我看来,这两种方法在使用或不使用generics时都应该具有相同的擦除,因此在任何一种情况下都是有效的覆盖。 (请注意,我还没有在任何地方使用generics参数,这就是为什么我很惊讶。) 我知道我之前已经向父类添加了generics类型,但只获得了有关子类的警告,而不是错误。 有谁能解释这个场景?

Java名称冲突,具有相同的擦除,都不会隐藏另一个

我得到这个名字冲突错误,我不知道我应该如何解决这个问题。 我有两个类,我使用重载方法“createSensors”。 这里简化是产生问题的代码: public abstract class ClassA { public static List createSensors(Collection list) { List sensors = new ArrayList(); for (ClassA s : list) { sensors.add(s.getSensor()); } return sensors; } } public abstract class ClassB extends ClassA { public static List createSensors(Collection list) { List sensors = new ArrayList(); for (ClassB s : list) { […]