此方法位于我们调用的Java库中
public void setNumbers(Map<Integer, ? extends COSObjectable> numbers) {
...
}
我有一个混合的Java / Scala项目,我将工作代码从Java类转移到Scala类中,现在我无法通过Scala使用此调用。我能得到的最好的是
val numbers = new util.HashMap[Integer, _ <: COSObjectable ]
node.setNumbers(numbers)
无法使用
进行编译需要类类型但找不到java.util.HashMap [Integer,_&lt;:org.apache.pdfbox.pdmodel.common.COSObjectable]
地图的COSObjectable参数是java接口
public interface COSObjectable {
COSBase getCOSObject();
}
我不确定Scala在使用界面时是否喜欢这种语法。似乎在说我只能在课堂上这样做。
答案 0 :(得分:1)
我想也许我只是在努力,取消_&lt;:似乎工作
val numbers = new util.HashMap[Integer, COSObjectable ]
答案 1 :(得分:0)
我能够使用它:
object Tes {
case class RandomStuff()
val numbers = new java.util.HashMap[Integer, _ <: RandomStuff ]
}
或
trait COSObjectable {
def getCOSObject: Nothing
}
val numbers: Map[Integer, _ <: COSObjectable ] = Map.empty
答案 2 :(得分:0)
实例化类时,需要使用特定类型,而不是通配符。就像在Java中一样,你无法做new util.HashMap<Integer, ? extends COSObjectable>
,你可以做同等的new util.HashMap[Integer, _ <: COSObjectable]
。
您需要指定实际类型,例如new util.HashMap[Integer, COSObjectable]
(或您需要的COSObjectable
的任何子类型)。