当构造函数参数使用 val 声明时,下面的代码失败
作品:
class Poso(array : Array[_ <: Any])
object Test {
new Poso(classOf[Retention].getEnumConstants())
}
不工作:
class Poso(val array : Array[_ <: Any])
object Test {
new Poso(classOf[Retention].getEnumConstants())
}
编译器给出错误:
Scala编译器中的错误:类型不匹配;找到:java.lang.Object必需:array[java.lang.Object]
而不能给出行号。
看起来像Scala编译器中的一个bug(它在一个异常上死亡)。你应该向Scala开发者报告。
使用< code>AnyRef而不是< code>Any为我修复了它:
class Poso(val array : Array[_ <: AnyRef])
object Test {
new Poso(classOf[java.lang.annotation.Retention].getEnumConstants())
}
考虑以下示例: 我知道下界通配符接受通配符中给定类的所有超类(这里是IOException)。 为什么在上述情况下编译器会显示编译错误?
的类型应该是什么?Eclipse建议使用,但我试图获得更具体的信息。
我不明白为什么会出现这些编译错误: 1: 类型列表中的add(capture#1-of?extends Exec.Bird)方法不适用于参数(Exec.Sparrow) 2: 方法添加(捕获#2-of?扩展Exec.Bird)类型列表中的参数(Exec.鸟)
问题内容: 让我们首先考虑一个简单的场景(请参阅ideone.com上的完整源代码): 这两个通配符是无关的,这就是为什么你可以doNothing使用和a 进行调用的原因。换句话说,两者?可以指完全不同的类型。因此,以下内容无法编译,这是可以预期的(同样在ideone.com上): 到目前为止,一切都很好,但是这里的事情开始变得非常混乱(如ideone.com所示): 上面的代码可以在Eclips
我试图使用JSoup从超文本标记语言文档中选择一些文本。 我感兴趣的超文本标记语言是表单的一部分: 我对获取任何
null 编译,我真的不明白为什么。基本上与第1行相同的问题。是的超类,如何将超类的成员放入此中? 编译。与第1行相同的问题。