Scala 中的特征列表

List of trait in Scala

我对 Scala 的特性有点困惑。

的确切含义是什么
val myList = List[MyTrait]

其中 MyTrait 是特征。

这是否意味着 myList 可以包含混入 MyTrait 的 class (MyClass) 的任何实例? 如果是这样,是不是有点奇怪,因为 MyClass 不是 MyTrait(或者是?)。

感谢您的帮助。

确实,如果您将列表声明为 List[MyTrait],它将成为任何混入 MyTrait.

的对象的容器

要更进一步,您甚至可以指定 class 和这样的特征:

如果 Animal 是 class 并且 Fly 是定义 fly() 方法的特征。

List[Animal with Fly] 将是所有会飞的动物的列表。

如果你有

trait MySuperTrait
trait MyTrait extends MySuperTrait
trait MyOtherTrait
abstract class MyAbstractClass
class MyClass extends MyAbstractClass with MyTrait with MyOtherTrait

然后MyClass IS A:

  • MyAbstractClass
  • MyTrait
  • MySuperTrait
  • MyOtherTrait
  • AnyRef / java.lang.Object
  • Any

因此,您可以在需要其中一种类型(或 MyClass 本身)的任何地方使用 MyClass 的实例。

trait A
trait B

class C extends A with B

val aList = List[A]()
// aList: List[A] = List()

val bList = List[B]()
// bList: List[B] = List()

new C :: aList
// res1: List[A] = List(C@1124910c)

new C :: bList
// res2: List[B] = List(C@24d7657b)

Class C 继承了 AB 特征。所以这并不奇怪。

我想,你问的真正的问题是这样的:

If so, isn't it a bit weird because MyClass is not a MyTrait (or is it ?).

是的。 MyClass 继承自 MyTrait,所以 MyClass IS-A MyTrait.