2017-06-06 5 views
2

スカラーの場合Nothingは他のすべてのタイプのサブタイプです。スカラ:ユーザー定義のクラスを持つタイプなし

scala> class A {} 
defined class A 

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

scala> x(new A) 

我々は、任意のクラスを作成すると、それは自動的にこのプロパティがScalaで維持されているどのようNothing

  1. のスーパータイプとなり?コンパイラは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

このプロパティはどのようにスケーラで保持されますか?コンパイラはNothingをコンパイル時に他のすべてのクラスに拡張させますか?

Nothingは、実際のクラスでは実装されていませんが、コンパイラの純粋なアーティファクトです。 Nothingタイプの実際の処理は、コンパイラ内のいくつかの場所でハードコーディングNothingとして嫌気することができます。たとえば、t1 == Nothingの場合はisSubType(t1: Type, t2: Type): Booleanが無条件にtrueです。

このように、カスタムクラスXを、クラス内のすべてのクラスから拡張することなく、クラスセットのサブタイプ(set sなど)として定義できますか?

+0

@OlivierBlanvillain答えをありがとう。 –

関連する問題