2011-01-10 110 views
1

我在Java中,看起來像這樣的接口:返回類型和子類的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 

回答

4

當編譯器說,自動推斷類型爲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 
    } 
} 

編輯:嘗試這則:

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

嗯,編譯器不喜歡: 錯誤:類型不匹配;發現:java.util.Set [java.lang.Class [_ $ 1(in method getTypeClasses)]]其中類型_ $ 1(在方法getTypeClasses中)<:org.infinispan.server.core.CacheValue required:java.util .Set [java.lang.Class [_ <:org.infinispan.server.core.CacheValue]] set – 2011-01-10 13:42:58