読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

Scalaの変位指定アノテーションと上限・下限境界がわからない

LL脳には辛い。
説明を読んでるときには、「なるほどなー」、と思うんだけど、いざ出てくると「どういう意味だっけ…」ってなるし、「いつ使えばいいんだ…」ってなってる。

classだけではなくて、defにも使えるので、混乱する。。。


とりあえずこれは理解した。

class Aaa
class Bbb extends Aaa
class Ccc extends Bbb



class D[T >: Bbb]


val dAaa = new D[Aaa] // dAaa: D[Aaa] = D@4b2bac3f

val dBbb = new D[Bbb] // dBbb: D[Bbb] = D@4988d8b8

val dCcc = new D[Ccc]
// error: type arguments [Ccc] do not conform to class D's type parameter bounds [T >: Bbb]



class E[T <: Bbb]


val eAaa = new E[Aaa]
// error: type arguments [Aaa] do not conform to class E's type parameter bounds [T <: Bbb]

val eBbb = new E[Bbb] // eBbb: E[Bbb] = E@2cd2a21f

val eCcc = new E[Ccc] // eCcc: E[Ccc] = E@3514a4c0

上限境界と下限境界は、定義したクラスとかメソッドとかに渡す時にチェックするってことかな。