2017-05-26 8 views
0

私はIntelliJの中で、次のクラスにコンパイルしようとしています:IntelliJでは実装方法を使用できませんか?

class QueryIterator[E](query: => E) extends Iterator[E] { 
    private var n: Option[Option[E]] = None 
    private def cache() = { 
    if (n.isEmpty) 
     try { n = Some(Some(query)) } 
     catch { case _: Exception => n = Some(None) } 
    } 
    private def uncache() = 
    n = None 
    override def hasNext: Boolean = { 
    cache() 
    n.get.isDefined 
    } 
    override def next(): E = { 
    cache() 
    val r = n.get.get 
    uncache() 
    r 
    } 
    override def toMap[K, V](implicit ev: <:<[E, (K, V)]): GenMap[K, V] = ??? 
    def iterable: Iterable[E] = 
    new AbstractIterable[E] { 
     override def iterator: Iterator[E] = QueryIterator.this 
     override def toMap[K, V](implicit ev: <:<[E, (K, V)]): GenMap[K, V] = ??? 
    } 
} 

しかし、それはちょうどそれは私がいずれかのこれらのメソッドからnullを返すことはできません enter image description here

をコンパイルしません。

私はsbtコンソールを再起動しようとしましたが、何の効果もありません。私は大いに助けに感謝します。

答えて

1

エラーメッセージがあなたにすべてを伝えます:

あなたの署名:

def toMap[K, V](implicit ev: <:<[E, (K, V)]): GenMap[K, V] 
署名が IteratorAbstractIterableにどのように見えるか

(*)

def toMap[K, V](implicit ev: <:<[E, (K, V)]): immutable.Map[K, V] 

immutable.MapGenMapを交換し、それちょうどうまくコンパイルされます。

(*)どちらのクラスでも、メソッドはhttps://www.scala-lang.org/api/current/scala/collection/TraversableOnce.htmlから継承されます。 「完全な署名」をクリックしてください。

+1

ありがとう、問題を解決しました!署名はIntelliJによって生成されたので、なぜそれが間違っているのか分かりません。 – Phoenix

関連する問題