是否可以更改迭代器类型?从 类 创建的实现接口的迭代器

is it possible to change iterator type ? of iterator created from classes that implemets interface

可以这样投吗?

Iterator<Class that implemets the interface> -->  Iterator<Interface>

我的算法中有这个成员Class

 public HashMap<Integer, HashMap<NodeC, EdgeC>> edges;

在这个函数上我正在生成一个迭代器类型 <EdgeData> 需要 return 但问题是我正在使用 类 spesipclly 和 Edge Class 所以它抛出一个错误

    @Override
    public Iterator<EdgeData> edgeIter(int node_id) {
 
       
            return this.edges.get(node_id).values().iterator();
        
      
    }


Incompatible types. Found: 'java.util.Iterator<src.api.Edge>', required: 'java.util.Iterator<src.interfaces.EdgeData>'```

关于图形的程序

结构

interfaces
  |-->  EdgeData
  |-->  Algo    

Classes 
  |--> Edge implements EdgeData
  |--> AlgoClass implements Algo

在我的 AlgoClass 中,我正在使用 HashMap> edges;

这样我就可以通过首先传递边的源来获得 o(1) 中的边,然后每个节点内部都有一个目的地的哈希图,因此通过传递目的地我将获得正确的边!在 o(1) 中大约 .

问题出在 edgeIter 函数中 Iterator 的 return 类型,我需要它是像 EdgeData 接口一样的 EdgeData 类型。 我不知道是否可以将迭代器转换为迭代器。

只需将 return 类型更改为 Iterator<? extends EdgeData>

如果您无法更改该界面,则必须解决该错误(因为该签名完全错误)。你可以,用丑陋的铸造。它会生成警告,然后您必须抑制这些警告。只需转换为 Iterator<EdgeData>.