[英]About using this.type in scala
我定義了兩個類:
class A { def method1 = this }
class B extends A { def method2 = this }
val b = new B
然后我檢查了b.method1的類型:
scala> b.method1.getClass
res29: Class[_ <: A] = class B
在這種情況下,我不能使用b.method1.method2
:
scala> b.method1.method2
<console>:11: error: value method2 is not a member of A
b.method1.method2
所以我必須這樣定義A和B:
class A { def method1: this.type = this }
class B extends A { def method2: this.type = this }
val b = new B
現在,我檢查b.method1
的類型:
scala> b.method1.getClass
res31: Class[_ <: B] = class B
b.method1.method2
在這里起作用:
scala> b.method1.method2
res32: b.type = B@4ff3ac
我的問題是,說Class[_ <: A] = class B
和Class[_ <: B] = class B
Class[_ <: A] = class B
是什么意思? 為什么第一個不能作為Class[_ <: A] = class B
似乎在說它也是Class B?
讓我們拆分表達式Class[_ <: A] = class B
第一部分, Class[_ <: A]
告訴您編譯器在編譯時知道的內容, b.method1.getClass
返回的類型為Class[_ <: A]
。 第二部分, class B
提到您將類B
作為值,但是編譯器並不知道。 那是運行時信息。
this.type
專門為亞類,其中所述類型從普通推斷方法this
沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.