我试图调用一个在Scala中使用varargs的构造函数。构造函数是用Java类编写的,它有两个参数,Block
和IBlockState...
。但是,以下代码似乎无法编译:
new BlockStateList(this, Seq[IBlockState[_ <: Comparable[_]]](FACING, DAMAGE):_*)
编译器报告此消息:
Error:(58, 66) type mismatch;
found : Seq[net.minecraft.server.v1_8_R3.IBlockState[_ <: Comparable[_]]]
required: Seq[net.minecraft.server.v1_8_R3.IBlockState[? <: Comparable[?0]] forSome { type ?0 <: Comparable[?0] }]
new BlockStateList(this, Seq[IBlockState[_ <: Comparable[_]]](FACING, DAMAGE):_*)
^
所需的类型对我来说在语法上并不合适,我不知道它希望我提供什么。
非常感谢所有帮助!
答案 0 :(得分:2)
问题与varargs无关,而与序列的内容无关。
正如我所推断,Comparable仅限于其类型参数。像
这样的东西trait Comparable[C <: Comparable[C]]
有关此模式,请参阅more info。因此,要表示此类型要求,您需要高级existential types规范。 MyType[_]
是完整MyType[A] forSome {type A}
的快捷方式。在您的情况下,编译器需要
Seq[IBlockState[_ <: Comparable[C]] forSome { type C <: Comparable[C] }]()
而不是
Seq[IBlockState[_ <: Comparable[_]]]()