class
場合によっては、キーワードがどのように機能するのかよくわかりません。
たとえば、このget(ClientResponse.class)
メソッドは ClientResponse.class
. 取得したときにこれをどのように使用し、インスタンスを渡すだけの利点は何ですか?
SomeClass.class
Java クラス オブジェクトを返します。Class はジェネリック化されているため、 SomeClass.class の実際の型は になりますClass<SomeType>
。
このオブジェクトには多くの用途があり、ここで Javadoc を読むことができます: http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html
でClientResponse.class
、class
はキーワードではなく、クラスの静的フィールドでもありませんClientResponse
。
キーワードは、Javaでクラスを定義するために使用するキーワードです。例えば
public class MyClass { } /* class used here is one of the keywords in Java */
class
inは、クラスを表すインスタンスへのClientResponse.class
ショートカットです。Class<T>
ClientResponse
のインスタンスが必要なインスタンスに到達する別の方法がありますClientResponse
。例えば
ClientResponse obj = new ClientResponse();
Class clazz = obj.getClass();
インスタンスを渡すだけの利点は何ですか?
obj
上記の例では、null(NPE)の場合に何が起こるかを確認できます。Class
その場合、メソッドがのインスタンスへの参照を取得する方法はありませんClientResponse
。
Class
キーワードとは異なるクラスは、インスタンスclass
を記述するメタデータです。を呼び出して作成するインスタンスのメソッド、データメンバー、コンストラクター、およびその他の機能について説明しますnew
。
たとえば、get(ClientResponse.class)メソッドはClientResponse.classを取得しますが、取得時にこれをどのように使用し、インスタンスを渡すだけの利点は何ですか?
ClientResponse
このメソッドにのインスタンスを渡すことはできません。のすべてのインスタンスに関するメタデータを期待していますClientResponse
。インスタンスを渡した場合、メソッドがそのインスタンスの状態を変更する可能性があることを期待します。ただし、すべてのインスタンスに関するメタデータを渡すと、メソッドが新しい種類のインスタンス(動的プロキシなど)を作成したり、のすべてのインスタンスに関するメタデータに依存する他の処理を実行したりできる場合がありClientResponse
ます。違いを見ます?
クラスはオブジェクトの「青写真」です。インスタンスはオブジェクトです。
私たちが持っている場合
public class SomeClass {
int a;
SomeClass(int a) {
this.a = a
}
}
このクラスのインスタンスを持つことができます
SomeClass c = new SomeClass(10);
c
クラスのインスタンスです。a
valueの整数を持ちます10
。
オブジェクトSomeClass.class
は を表しますClass
。
これは、次の情報を持つSomeClass.class
タイプobject
のです。Class
SomeClass
整数メンバー変数で
metadata
クラスについては他にもたくさんありますSomeClass
。の値がないことに注意してくださいa
。
インスタンスのデータを操作/取得するために、 of のような呼び出しやその他の便利な関数を使用get(c)
して何かを行う予定がある場合に使用する必要があります。instance
c
c.a
get(SomeClass.class)
引数が何らかのタイプのクラスであるという事実に基づいて get が何かを返す場合に使用する必要があります。たとえば、これが、渡されたクラスのタイプに基づいてRegistry
取得するマップを持つクラスのメソッドである場合。implementation class
ClientResponse.class
のインスタンスを次に示しますClass<ClientResponse>
。一般Class
に、オブジェクトはオブジェクトのタイプを表します。新しいインスタンスを作成する場合:
Object obj = new ClientResponse()
次を呼び出して、そのオブジェクトのクラス (タイプ) を取得できます。
obj.getClass()
では、なぜClass
オブジェクトをあちこちに渡すのでしょうか? あまり一般的ではありませんが、ある理由の 1 つは、特定のクラスの任意の数のインスタンスをメソッドが作成できるようにするためです。
ClientResponse resp = ClientResponse.newInstance();