2017-05-26 46 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] = ??? 
    } 
} 

,但它只是不會編譯 enter image description here

它不會讓我從這些方法返回null要麼。

我試過重新啓動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.Map,並更換GenMap將編譯得很好。

(*)在這兩個類中,該方法都從https://www.scala-lang.org/api/current/scala/collection/TraversableOnce.html繼承。確保點擊「完整簽名」。

+1

謝謝,解決了問題!這個簽名是由IntelliJ生成的,所以我不知道它爲什麼錯了。 – Phoenix

相關問題