Javaチュートリアル から:
最後に、class literalと呼ばれる特別な種類のリテラルもあります。これは、型名を取得し、「
.class
"; 例えば、String.class
。これは、型自体を表す(Class
型の)オブジェクトを指します。
このリテラルをどのタイプの変数に割り当てることができますか?
可能であれば、小さな例を挙げてください。
Class<String> c = String.class;
Javadoc for Java.lang.Class
これらの小さな男の1人でできることを確認する-主にリフレクションに関連する
それを理解するには、StringがクラスClassのインスタンス(オブジェクト)であることを理解する必要があります。文字列リテラル(例: "I am a string。")は、クラス(Stringのインスタンス(オブジェクト)を表す表記法です。一方、クラスリテラル(Hashtable.classなど)は、クラスのインスタンスクラス。
ここの他の良い答えのおかげで、あなたはそれが何であるかを知っていますが、これも明確にするかもしれない典型的な使用例です:
_ private static Logger log = Logger.getLogger(YourClassHere.class);
_
コードが示すように、これはロギングフレームワークを初期化する行です(この例では、_org.Apache.log4j
_パッケージを使用していますが、原則は他のフレームワークにも拡張されます)。 getLogger()
メソッドには、クラスリテラルが必要なため、ログの内容(つまり、現在のオブジェクトのクラス)がわかります。
JLS による
15.8.2クラスリテラル
クラスリテラルは、クラス名、インターフェイス名、配列名、またはプリミティブ型の後に
.
とトークンclass
が続く式です。クラスリテラルのタイプはClass
です。現在のインスタンスのクラスの定義クラスローダーによって定義された名前付きタイプ(またはvoid
)のClassオブジェクトに評価されます。
いくつかの一般的な使用法は、 Runtime-Type Tokens としてのクラスリテラルにあります。
リテラル自体はMyClass
です。 _MyClass.class
_と書くと、クラスオブジェクトへの参照が得られます。 new MyClass()
と記述すると、リテラルを使用して、_MyClass.class
_で取得したクラスオブジェクトのインスタンスを取得します。インスタンスから、myClassInstance.getClass()
を呼び出すことにより、同じクラスオブジェクトを取得します。
100%確実ではありませんが、リテラル自体を変数に割り当てることはできません。できることは、クラスの名前を文字列として取得し、リフレクションフレームワークを使用してインスタンスを作成することです。
例では、そのようなものです:
Class myClass = MyClass.class
または
MyClass.class.getResourceAsStream("config.properties");
JVMがアプリケーションクラスをロードすると、Java.class.Class
オブジェクト。
したがって、通常、クラスを表すClass
型のインスタンスがメモリにいくつかあります。したがって、次のようなことができます。
Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class
bicycleClass.getName(); // returns your class name
bicycleClass.getDeclaredMethods(); // returns your (declared) class methods
それを理解するには、String
がそのinstance (object)
Object
のsuperclass (parent class)
であることを理解する必要があります。
_class String
_のinstance (object)
の値は_String literal
_です(例_"I am a string."
_):
_class | instance (object) | literal
------------------------------------------------
String | instance_name = | "I am a string."
_
一方、_class Object
_のinstance (object)
の値は_Class literal
_ —(たとえば_Hashtable.class
_のinstance (object)
を参照する_class Hashtable
_)
_class | instance (object) | literal
------------------------------------------------
Hashtable | instance_name | Hashtable.
_