У меня есть интерфейс в Java, который выглядит примерно так:Возвращает коллекцию Java типа и подклассов от Scala
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
Любая идея хо w обойти эту проблему?
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
Хммм, компилятор не нравится: ошибка: несоответствие типов; найдено: java.util.Set [java.lang.Class [_ $ 1 (в методе getTypeClasses)]] где type _ $ 1 (в методе getTypeClasses) <: org.infinispan.server.core.CacheValue требуется: java.util .Set [java.lang.Class [_ <: org.infinispan.server.core.CacheValue]] set –
Это работает! Спасибо :) –