【发布时间】:2013-08-06 06:34:12
【问题描述】:
说我有:
class Class[CC[A, B]]
class Thing[A, B <: Int]
class Test extends Class[Thing] // compile error here
我得到编译器错误:
类型参数的种类 (cspsolver.Thing) 不符合 Class 类中类型参数的预期种类 (CC 类型)。 cspsolver.
Thing 的类型参数与类型 CC 的预期参数不匹配:类型 C 的边界 :Nothing
但是,当我修改代码使其看起来像这样时:
class Class[CC[A, B]]
class Thing[A, B] {
type B <: Int
}
class Test extends Class[Thing]
它编译得很好。它们在功能上不是等效的吗?
【问题讨论】:
-
在最后一个示例中,您有类型参数
B和类型成员B。它们具有相同的名称(因此只有一个可见),但它们并不相同。 -
@senia,有没有用同名有用的情况?
-
@huynhjl:我猜没有。但在某些情况下,阴影很有用:您可以重用名称。在隐式的情况下,还有一些部分有用的阴影滥用:参见this answer。
-
@senia 你应该把你的评论变成一个答案,这样它才能被接受。你有正确的答案,而且很简单。
-
@Jean-PhilippePellet:谢谢,但这不是答案。我已经解释了为什么最后一个代码示例可以编译,但没有解释为什么第一个不编译。
标签: scala generics types scala-2.10