2012-03-09 8 views
46

Scalaでオブジェクトタイプのクラスオブジェクトを取得する方法を知りました。それはオブジェクトの二重の意味のために口いっぱいです。ここで失敗する例を次に示します。スカラオブジェクトタイプのclassOfを取得する方法

object Main 
{ 
    private [this] val TAG = classOf [Main].getName; 
} // Main 

Mainがクラスだった場合、それは完全に動作します。何か案は?

答えて

67
scala> Main.getClass 
res1: java.lang.Class[_] = class Main$ 
+1

はい。わかりました、今、それはすべて明らかになります。 'object'sはちょうど1つのインスタンスを持ち、したがって' getClass'を呼び出します。ありがとう。 – Martin

+4

@マーティン実際、私はそれが間違っていると思います。 'object'はインスタンスではありません。型ではないからです。それらは(コンパイラ生成の)クラスの唯一のインスタンスであり、そのために 'getClass'を呼び出すことができます。 –

+3

これはコンパイル時の定数としてこれを行う方法なので、ClassのJava Annotation Attributeに使用できますか? –

6

メインはオブジェクトなので、あなたの例を動作させるには、代入線を単に置き換えます。 Mainタイプではありませんので、

private [this] val TAG = this.getClass.getName; 
14

classOf[Main]が動作しない理由はあります。

クラスと特性はタイプを定義しますが、オブジェクトはそうではありません。

関連する問題