java无法向上转换到接口 私有类EntryItr实现迭代器{ ... } 私有类KeyItr实现迭代器{ 专用迭代器itr; KeyItr(){ itr=new EntryItr();//无法创建 }

java无法向上转换到接口 私有类EntryItr实现迭代器{ ... } 私有类KeyItr实现迭代器{ 专用迭代器itr; KeyItr(){ itr=new EntryItr();//无法创建 },java,interface,casting,upcasting,Java,Interface,Casting,Upcasting,为什么不能向上转换EntryItr到以前实现的接口?您发布的这段代码甚至没有编译。 您使用的泛型不正确:EntryItr类应声明为EntryItr。此外,KeyItr的itr字段具有类型为V的无法识别的泛型值。您应该将其更改为对象,或者将其添加到KeyItr的泛型签名,即KeyItr 在这些更改之后,应该可以进行赋值itr=new EntryItr(); 请注意,这里的菱形运算符表示EntryItr将具有与KeyItr的itr相同的泛型签名,从KeyItr中删除,它隐藏了封闭类的k。 priva

为什么不能向上转换EntryItr到以前实现的接口?

您发布的这段代码甚至没有编译。 您使用的泛型不正确:
EntryItr
类应声明为
EntryItr
。此外,
KeyItr
itr
字段具有类型为
V
的无法识别的泛型值。您应该将其更改为
对象
,或者将其添加到
KeyItr
的泛型签名,即KeyItr

在这些更改之后,应该可以进行赋值
itr=new EntryItr();

请注意,这里的菱形运算符表示
EntryItr
将具有与
KeyItr
itr
相同的泛型签名,从
KeyItr
中删除
,它隐藏了封闭类的
k
private class EntryItr implements Iterator<Map.Entry<K, V>> {
... 
}

private class KeyItr<K> implements Iterator<K> {

    private Iterator<Map.Entry<K,V>> itr;

    KeyItr(){
        itr=new EntryItr(); // CANNOT CREATE
    }