2017-03-17 72 views
-5

在Scala中,我該如何聲明一個可容納任何東西的Java列表?如果我試圖把一個元組在它Scala - 聲明一個可容納任何東西的Java列表

列表[對象]得到不高興,斯卡拉錯誤說

type mismatch; found :  java.util.List[Triple[Integer,Integer, Integer]] required: 
java.util.List[Object] Note: Triple[Integer,Integer, Integer] <: Object, but Java-defined 
trait List is invariant in type E. You may wish to investigate a wildcard type 
such as `_ <: Object`. (SLS 3.2.10) 

我不知道這意味着什麼,我怎麼申報清單持有三(或元組,或任何

我的代碼看起來是這樣的(這是捻,所以它有@,但它僅僅是Scala代碼):

@import java.util.List; 

@(field:List[Object], min:Int=1)(f: Object, Int) => Html) 
@{ 
    (0 until math.max(if (field.isEmpty) 0 else field.size, min)) 
     .map(i => f(field.get(i),i)) 
} 
+2

編譯器說'你可能希望調查通配符類型 ,如_ <:Object'。你嘗試過嗎? – danielnixon

+3

我不認爲你正在顯示產生實際錯誤的代碼。 –

回答

0

使用斯卡拉(而不是Java)集合,例如scala.collection.Seq[Any]。如果它需要是可變的,看scala.collection.mutable

scala> val t = Tuple3[Int,Int,Int](1,2,3) 
t: (Int, Int, Int) = (1,2,3) 

scala> val listAny: Seq[Any] = Seq[Any](t,t,5,"happy now?") 
listAny: Seq[Any] = List((1,2,3), (1,2,3), 5, happy now?) 

如果您堅持使用Java集合,你可以嘗試field:List[_ <: Object],該錯誤信息的建議。 另外請注意,您可以將傳遞給Java應用程序,因爲在運行時,Scala代碼由與JVM兼容的編譯字節碼錶示。

+0

恩,我不想那麼做,因爲我正在使用Java的播放框架,所以發送一個Java列表 - 你也沒有真正回答這個問題! – bharal

+2

對不起 - 被「在Scala中,我如何聲明一個包含任何東西的列表」。我以爲你需要一個可以容納任何東西的列表,在斯卡拉 – radumanolescu

相關問題