2017-06-06 56 views
2

在scala中Nothing是每個其他類型的子類型。Scala:在用戶定義的類中不輸入任何內容

scala> class A {} 
defined class A 

scala> def x[T >: Nothing](t: T): Unit = {} 
x: [T](t: T)Unit 

scala> x(new A) 

當我們創建一個任意類,它會自動成爲Nothing

  1. 一個超這個屬性是如何保持在Scala呢?編譯器在編譯時是否使Nothing擴展了其他每個類?
  2. 像這樣,纔有可能定義一個自定義類X作爲一組類的子類(比如設置小號)未做X從所有類的小號延長? (例如:X類是包com.myproject.models中的所有類別的子類型)

請分享您的想法。

+2

見https://softwareengineering.stackexchange.com/questions/195793/how-is-nothing-a-subtype-of-every-other-type-in​​-scala –

回答

6

該屬性是如何維護在scala中的?在編譯時,編譯器是否使任何其他類都不會擴展?

Nothing沒有用實際的類實現,它是編譯器的純粹的人工產物。 Nothing類型的實際處理在編譯器內部的幾個地方可以被庸俗化爲硬編碼Nothing,例如,isSubType(t1: Type, t2: Type): Booleant1 == Nothing時是無條件的。

像這樣,是否可以定義一個自定義類X作爲一組類的子類型(比如說set s),而不用讓X從s中的所有類延伸?

+0

@OlivierBlanvillain感謝你的回答。 –

相關問題