私はScalaの特徴についてちょっと混乱しています。 MyTrait
が特徴ですScalaの形質のリスト
val myList = List[MyTrait]
の正確な意味は何ですか。
myList
には、MyTrait
が混在するクラス(MyClass
)のインスタンスを含めることはできません。 もしそうなら、MyClass
はMyTrait
(またはそれですか?)ではないので少し奇妙ではありませんか?
ありがとうございました。
私はScalaの特徴についてちょっと混乱しています。 MyTrait
が特徴ですScalaの形質のリスト
val myList = List[MyTrait]
の正確な意味は何ですか。
myList
には、MyTrait
が混在するクラス(MyClass
)のインスタンスを含めることはできません。 もしそうなら、MyClass
はMyTrait
(またはそれですか?)ではないので少し奇妙ではありませんか?
ありがとうございました。
実際には、リストをList[MyTrait]
として宣言すると、MyTrait
に混在するオブジェクトのコンテナになります。
Animal
は
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([email protected])
new C :: bList
// res2: List[B] = List([email protected])
クラスC
は両方A
とB
の特徴を継承します。だからそれは奇妙ではない。
私は、あなたが求めている本当の質問はちょうどこのだと思う:MyClass
がMyTrait
はないので、その場合は
、それは少し奇妙ではありません(またはそれがあります?)。
です。 MyClass
はMyTrait
を継承しますので、MyClass
IS-A MyTrait
です。
はい、明確ではありませんでした私には、形質は実際にはクラスであった。どうも。 – stackoverflowed
http://stackoverflow.com/questions/663254/why-doesnt-the-example-compile-aka-how-does-co-contra-and-in-variance-w – Rumoku