12

class場合によっては、キーワードがどのように機能するのかよくわかりません。

たとえば、このget(ClientResponse.class)メソッドは ClientResponse.class. 取得したときにこれをどのように使用し、インスタンスを渡すだけの利点は何ですか?

4

8 に答える 8

10
SomeClass.class

Java クラス オブジェクトを返します。Class はジェネリック化されているため、 SomeClass.class の実際の型は になりますClass<SomeType>

このオブジェクトには多くの用途があり、ここで Javadoc を読むことができます: http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html

于 2012-10-19T21:32:32.577 に答える
7

ClientResponse.classclassはキーワードではなく、クラスの静的フィールドでもありませんClientResponse

キーワードは、Javaでクラスを定義するために使用するキーワードです。例えば

public class MyClass { } /* class used here is one of the keywords in Java */

classinは、クラスを表すインスタンスへのClientResponse.classショートカットです。Class<T>ClientResponse

のインスタンスが必要なインスタンスに到達する別の方法がありますClientResponse。例えば

ClientResponse obj = new ClientResponse();
Class clazz = obj.getClass(); 

インスタンスを渡すだけの利点は何ですか?

obj上記の例では、null(NPE)の場合に何が起こるかを確認できます。Classその場合、メソッドがのインスタンスへの参照を取得する方法はありませんClientResponse

于 2012-10-19T21:44:08.863 に答える
2

Classキーワードとは異なるクラスは、インスタンスclassを記述するメタデータです。を呼び出して作成するインスタンスのメソッド、データメンバー、コンストラクター、およびその他の機能について説明しますnew

たとえば、get(ClientResponse.class)メソッドはClientResponse.classを取得しますが、取得時にこれをどのように使用し、インスタンスを渡すだけの利点は何ですか?

ClientResponseこのメソッドにのインスタンスを渡すことはできません。のすべてのインスタンスに関するメタデータを期待していますClientResponse。インスタンスを渡した場合、メソッドがそのインスタンスの状態を変更する可能性があることを期待します。ただし、すべてのインスタンスに関するメタデータを渡すと、メソッドが新しい種類のインスタンス(動的プロキシなど)を作成したり、のすべてのインスタンスに関するメタデータに依存する他の処理を実行したりできる場合がありClientResponseます。違いを見ます?

于 2012-10-19T21:52:02.460 に答える
2

クラスはオブジェクトの「青写真」です。インスタンスはオブジェクトです。

私たちが持っている場合

public class SomeClass {
   int a;
   SomeClass(int a) {
      this.a = a
   }
}

このクラスのインスタンスを持つことができます

SomeClass c = new SomeClass(10);

cクラスのインスタンスです。avalueの整数を持ちます10

オブジェクトSomeClass.classは を表しますClass

これは、次の情報を持つSomeClass.classタイプobjectのです。ClassSomeClass

  1. 具象クラス
  2. 1 つのコンストラクター
  3. 整数メンバー変数

    metadataクラスについては他にもたくさんありますSomeClass。の値がないことに注意してくださいa

インスタンスのデータを操作/取得するために、 of のような呼び出しやその他の便利な関数を使用get(c)して何かを行う予定がある場合に使用する必要があります。instancecc.a

get(SomeClass.class)引数が何らかのタイプのクラスであるという事実に基づいて get が何かを返す場合に使用する必要があります。たとえば、これが、渡されたクラスのタイプに基づいてRegistry取得するマップを持つクラスのメソッドである場合。implementation class

于 2012-10-19T22:07:49.903 に答える
1

ClientResponse.classのインスタンスを次に示しますClass<ClientResponse>。一般Classに、オブジェクトはオブジェクトのタイプを表します。新しいインスタンスを作成する場合:

Object obj = new ClientResponse()

次を呼び出して、そのオブジェクトのクラス (タイプ) を取得できます。

obj.getClass()

では、なぜClassオブジェクトをあちこちに渡すのでしょうか? あまり一般的ではありませんが、ある理由の 1 つは、特定のクラスの任意の数のインスタンスをメソッドが作成できるようにするためです。

ClientResponse resp = ClientResponse.newInstance();
于 2012-10-19T21:33:49.337 に答える