斯卡拉在斯卡拉类
我有一个Java接口作家定义如下重写Java接口方法:斯卡拉在斯卡拉类
public interface Writer<K, V> {
Iterator<Product2<K, V>> iterator();
}
,我试图实现在Scala的类此接口ExternalWriter这是如下:
private class ExternalWriter[K, V, C]
extends Logging
with Writer[K, V] {
override def iterator(): Iterator[Product2[K, C]] = {
partitionedIterator.flatMap(pair => pair._2)
}
}
但是当我尝试编译这段代码,我得到一个错误:
Error: Overriding method iterator in trait SortShuffleFileWriter of type()Iterator[Product2[K,V]]; method iterator has incompatible type override def iterator(): Iterator[Product2[K, C]] = {
我该如何解决这个问题?
你为什么把V
更改为C
?
您的覆盖方法应该是,
override def iterator(): Iterator[Product2[K, V]] = {
partitionedIterator.flatMap(pair => pair._2)
如果你想使用C
,那么你就应该实现Writer
与C
为,
with Writer[K, C] {
当我改变覆盖方法来覆盖def迭代器():Iterator [Product2 [K,V]]我得到以下错误 错误:type mismatch; 实测值:迭代[产品2 [K,C]] 需要:scala.collection.GenTraversableOnce [产品2 [K,V]] partitionedIterator.flatMap(对=> pair._2) ^ –
@HaseebJaved,你尝试改变你的'带',而不是像我刚才提到的那样。 – Codebender
是的,但会导致各种其他错误,如: 错误:(90,22)类ExternalWriter需要抽象,因为方法insertAll类型为(x $ 1:Iterator [Product2 [K,C]] (注意Iterator [Product2 [K,C]]与Iterator [Product2 [K,V]]不匹配) private [spark] class ExternalWriter [K,V,C]( 我想我的程序结构都错了,可能是我应该重新开始。 –
尝试用java替换您的Scala类迭代器。作为scala Iterator和java Iterator的util.Iterator是不同的。
private class ExternalWriter[K, V, C]
extends Logging
with Writer[K, V] {
override def iterator(): java.util.Iterator[Product2[K, C]] = {
partitionedIterator.flatMap(pair => pair._2)
}
}
以上是修改后的代码。
'java.util.Iterator'接口与'scala.collection.Iterator'特性分开(除了提到的@Codebender问题)。你对此有过解释吗? –