黒猿の家:Scalaのオブジェクトは、一般的なことはできません

私たちは、オブジェクト・タイプ・パラメータに追加することはできません。例えば、変数のリスト。タイプTの要素のリストは、ノードのいずれかのT型ヘッド、テールタイプリスト[T]のいずれか空であります

abstract class List[+T]{
    def isEmpty:Boolean
    def head:T
    def tail:List[T]
}

class Node[T](val head:T,val tail:List[T]) extends List[T]{
    def isEmpty = false
}

class Empty[T] extends List[T]{
    def isEmpty = true
    def head = throw new UnsupportedOperationException
    def tail = throw new UnsupportedOperationException
}

尖叫提示:这里我用Node和Empty是为了让讨论对Java程序员而言比较容易。如果你对Scala列表很熟悉的话,之哟啊在脑海中将其替换成::和Nil即可

空のクラスは少し愚かに見えるように、状態はありませんので、定義されました。しかし、あなたは、単にオブジェクトにそれを回すことができません:
空の[T]をオブジェクトの一覧[T] //エラーを拡張します

あなたは、パラメータ化された型をオブジェクトに追加することはできません。この場合、溶液の量は、我々はリストの[何も]を継承していることである:
オブジェクト空のインクルードリスト[何も]拡張します

また、何もタイプは、すべてのタイプのサブタイプである、覚えておいてください。したがって、我々は、単一の要素として設定されたリスト場合
ヴァル=新しい新規のList1ノード(42は、空)

型チェックは成功です。共変ルールは、リスト[なし]はリスト[INT]にに変換することができ、したがって、ノード[int]はコンストラクタを呼び出すことができます

ます。https://www.jianshu.com/p/49566fee14bbで再現

おすすめ

転載: blog.csdn.net/weixin_33904756/article/details/91182531