【问题标题】:java cannot upcast to an interfacejava不能向上转换到接口
【发布时间】:2017-06-22 18:11:12
【问题描述】:
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
    }

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

【问题讨论】:

  • KeyItr中删除&lt;K&gt;,它隐藏了封闭类的k

标签: java interface casting upcasting


【解决方案1】:

您发布的这段代码甚至无法编译。 您使用的泛型不正确:EntryItr 类应声明为EntryItr&lt;K, V&gt;。此外,KeyItritr 字段具有类型为 V 的无法识别的通用值。您应该将其更改为Object,或将其添加到KeyItr 的通用签名中,即 KeyItr

在这些更改之后,分配itr = new EntryItr&lt;&gt;(); 应该是可能的。

请注意此处的菱形运算符表示EntryItr 将具有与KeyItritr 相同的泛型签名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2017-03-16
    • 1970-01-01
    • 2016-08-17
    • 2021-11-08
    相关资源
    最近更新 更多