Вернуть коллекцию типов и подклассов Java из Scala - PullRequest
1 голос
/ 10 января 2011

У меня есть интерфейс на Java, который выглядит примерно так:

public interface X<T> {
  Set<Class<? extends T>> getTypes();
}

Мне нужно реализовать этот интерфейс в Scala 2.8, и сейчас я делаю что-то вроде этого:

class XImpl extends X<CacheValue> {
  override def getTypes = {
    val set = asJavaSet(Set(classOf[CacheValue]))
    set
  }
}

Но это не компилируется, и компилятор говорит:

error: type mismatch;
found   : java.util.Set[java.lang.Class[CacheValue]]
required: java.util.Set[java.lang.Class[_ <: CacheValue]]
set

Есть идеи, как обойти эту проблему?

UPDATE:

Я попробовал следующее, но все равно не повезло:

  override def getTypeClasses = {
     val set = asJavaSet(Set(classOf[CacheValue].asSubclass(classOf[CacheValue])))
     set
  }

В этом последнем случае я получаю:

error: type mismatch;
found   : java.util.Set[java.lang.Class[?0]] where type ?0 <: org.infinispan.server.core.CacheValue
required: java.util.Set[java.lang.Class[_ <: org.infinispan.server.core.CacheValue]]
set

1 Ответ

4 голосов
/ 10 января 2011

Как говорит компилятор, автоматически выводимый тип - java.util.Set[java.lang.Class[CacheValue]], но он должен работать, если вы аннотируете тип явно:

class XImpl extends X[CacheValue] {
  override def getTypes = {
    val set = asJavaSet(Set(classOf[CacheValue]: java.lang.Class[_ <: CacheValue]))
    set
  }
}

РЕДАКТИРОВАТЬ: попробуйте это затем:

...