gpt4 book ai didi

java - Scala 中奇怪的类型不匹配

转载 作者:行者123 更新时间:2023-12-02 04:19:40 25 4
gpt4 key购买 nike

我正在尝试调用 Scala 中采用可变参数的构造函数。该构造函数是用 Java 类编写的,并采用两个参数:BlockIBlockState...。然而,以下代码似乎无法编译:

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):_*)
^

所需类型在语法上对我来说似乎不正确,而且我不知道它希望我提供什么。

非常感谢所有帮助!

最佳答案

问题与可变参数无关,而是与序列的内容有关。

正如我所推断的,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[_]]]()

关于java - Scala 中奇怪的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com