是否可以更改迭代器类型?从 类 创建的实现接口的迭代器
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>
.
可以这样投吗?
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
这样我就可以通过首先传递边的源来获得 o(1) 中的边,然后每个节点内部都有一个目的地的哈希图,因此通过传递目的地我将获得正确的边!在 o(1) 中大约 .
问题出在 edgeIter 函数中 Iterator 的 return 类型,我需要它是像 EdgeData 接口一样的 EdgeData 类型。 我不知道是否可以将迭代器转换为迭代器。
只需将 return 类型更改为 Iterator<? extends EdgeData>
。
如果您无法更改该界面,则必须解决该错误(因为该签名完全错误)。你可以,用丑陋的铸造。它会生成警告,然后您必须抑制这些警告。只需转换为 Iterator<EdgeData>
.