8

createクラスオブジェクトへの参照を持ち、リフレクションを使用するthis:を行うメソッドを持つことでオブジェクト作成ファクトリーが実装されている場所を見てきましたがclass.newInstance()、デフォルトのコンストラクターを直接呼び出すよりも効率的ではない可能性があります。

Java が のようなものをサポートしていればreturn new this();、これを親クラスに実装でき、それはファクトリ メソッドとして機能します (そして、のようなコンストラクターがない場合は例外をスローしますclass.newInstance())。

なぜそのようなものがサポートされていないのですか?

PS:stackOverflowでの最初の質問:)

4

5 に答える 5

4

設計どおり、thisキーワードはインスタンスのコンテキストでのみ有効です。その型は、それが発生するクラスの型です。

Java 言語仕様から:

一次式として使用される場合、キーワード this は、インスタンス メソッドが呼び出されたオブジェクト (§15.12) または構築中のオブジェクトへの参照である値を示します。

デフォルトのコンストラクターを使用して新しいオブジェクトを作成する場合は、それを直接呼び出すことができます。

 return new MyType();

Object.clone()オブジェクトのクローンを作成する場合は、メソッドを使用できる場合があります。

于 2013-05-24T13:32:07.547 に答える
2

を使用して近づくことができますthis.getClass().newInstance()

ただし、この方法はお勧めしません。1 つには、クラスにデフォルトのコンストラクターが必要です。

于 2013-05-24T13:32:22.783 に答える
1

Javaドキュメントによると

インスタンス メソッドまたはコンストラクター内では、これは現在のオブジェクト (メソッドまたはコンストラクターが呼び出されているオブジェクト) への参照です。this を使用して、インスタンス メソッドまたはコンストラクター内から現在のオブジェクトの任意のメンバーを参照できます。

したがって、これはオブジェクトの現在のインスタンスを保持しています。タイプではありません。

ただし、オブジェクトを初期化するときは、クラス タイプで初期化する必要があります。お気に入り

ClassType c = new ClassType();

したがって、この 2 つのことはまったく異なります。そのため、初期化できませんthis

于 2013-05-24T13:34:02.010 に答える
1

あなたの質問への答えは、instance知らないうちにクラスの を作成するに はどうすればよいclass nameですか? ただし、thisキーワードはcurrent objectまだ作成していないものに適用されます。

于 2013-05-24T13:35:17.190 に答える