2015-08-08 208 views
0

我有一个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]] = {

我该如何解决这个问题?

+0

'java.util.Iterator'接口与'scala.collection.Iterator'特性分开(除了提到的@Codebender问题)。你对此有过解释吗? –

回答

2

你为什么把V更改为C

您的覆盖方法应该是,

override def iterator(): Iterator[Product2[K, V]] = { 
    partitionedIterator.flatMap(pair => pair._2) 

如果你想使用C,那么你就应该实现WriterC为,

with Writer[K, C] { 
+0

当我改变覆盖方法来覆盖def迭代器():Iterator [Product2 [K,V]]我得到以下错误 错误:type mismatch; 实测值:迭代[产品2 [K,C]] 需要:scala.collection.GenTraversableOnce [产品2 [K,V]] partitionedIterator.flatMap(对=> pair._2) ^ –

+0

@HaseebJaved,你尝试改变你的'带',而不是像我刚才提到的那样。 – Codebender

+0

是的,但会导致各种其他错误,如: 错误:(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]( 我想我的程序结构都错了,可能是我应该重新开始。 –

0

尝试用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) 
    } 
} 

以上是修改后的代码。