2014-02-17 4 views
1

Я работаю с библиотекой java в scala, и мне нужно реализовать интерфейс, который, помимо прочего, требует, чтобы я реализовал реализацию Java-интерфейса Iterable.Scala and util.Iterator [0]

Когда я пытаюсь реализовать его с или без JavaConversions он говорит мне, что метод я переопределение (iterator(): java.util.Iterator) имеет неправильный тип, даже если метод типа java.util.Iterator.

В качестве побочного примечания, может быть, это связано с тем, что для интерфейса требуется, чтобы я возвращал итератор неуказанного типа?

+0

См. Ответный вопрос extempore (и Daniel Sobral) на связанный вопрос. –

ответ

0

следующие работы в РЕПЛ:

import java.lang.Iterable 
import java.util.Iterator 

class A extends Iterable[String] { 
    override def iterator(): Iterator[String] = null 
} 

Обратите внимание, что iterator() потребности вернуть Iterator, не Iterable и что смешения, Iterable находится в пакете java.lang пока Iterator в java.util.

+0

Это не проблема. Родительский класс указывает итератор ** Untyped ** (эффективно «Итератор »). Если бы итератор был напечатан, я бы не столкнулся с проблемой. Для справки цепочка наследования выглядит так: ** Интерфейс Java ** Iterable -> ** Интерфейс Java ** Компонент расширяет Iterable (No Type) -> ** Scala ** класс ScalaComponent расширяет компонент. Таким образом, ScalaComponent имеет 'override def iterator(): util.Iterator [_]'. Это вызывает ошибку компилятора. – Roby718