2015-08-08 226 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) 
    } 
} 

以上是修改後的代碼。