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
继承了 A
和 B
特征。所以这并不奇怪。
我想,你问的真正的问题是这样的:
If so, isn't it a bit weird because MyClass
is not a MyTrait
(or is it ?).
是的。 MyClass
继承自 MyTrait
,所以 MyClass
IS-A MyTrait
.
我对 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
继承了 A
和 B
特征。所以这并不奇怪。
我想,你问的真正的问题是这样的:
If so, isn't it a bit weird because
MyClass
is not aMyTrait
(or is it ?).
是的。 MyClass
继承自 MyTrait
,所以 MyClass
IS-A MyTrait
.