簡體   English   中英

關於在Scala中使用this.type

[英]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 BClass[_ <: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM