一位同事扩展了LinkedHashMap,并覆盖了removeEldestEntry
,类似于以下代码:
import java.util.LinkedHashMap;
import java.util.Map.Entry;
public class CompileTest {
static class MyMap<K, V> extends LinkedHashMap<K, V> {
protected boolean removeEldestEntry(Entry<K, V> eldest) {
return true;
}
}
}
请注意参数类是Entry
,而不是Map.Entry
。
Eclipse生成了方法签名。IntelliJ显示错误,抱怨Entry
在java.util.LinkedHashMap
中具有私有访问权限,并更喜欢Map.Entry
。但无论哪种方式编译都可以。
我写了一个较小的示例来进行实验:
public class CompileTest {
static class A{
public class Inner {
}
public void doStuff(Inner a){}
}
static class B extends A{
private class Inner {
}
}
static class C extends B {
public void doStuff(Inner a) { }
}
}
现在IntelliJ没有显示错误,但是该类无法编译。这里有两种看似相同的情况,其中IDE和编译器似乎都交替执行,永远也不会达成一致。
有人能解释一下吗?
Entry
vsMap.Entry
不执行相同操作,其中Entry
是LinkedList
的内部类,使Entry
成为Map
的内部类 - user177800import
语句在哪里?导入实际上建立了别名,消除了给定未限定名称引用的完全限定名称的歧义。你的测试用例没有这个。 - erickson