0

クラスのパスの文字列表現があります。これは3つのクラスのいずれかであり、すべて同じインターフェイスAdapterを実装しますが、値が何であるかはわかりません。

  • 「com.example.adapters.Music」
  • 「com.example.adapters.Video」
  • 「com.example.adapters.Photo」

上記の3つの文字列のいずれかを保持する変数のみが与えられた場合、実際のクラスの使用可能なインスタンスを取得するにはどうすればよいですか?

4

3 に答える 3

3

次を使用できます。

String name = "com.example.adapters.Music";
Object obj = Class.forName(name).newInstance();

次に、正しいタイプにキャストobjする必要があります(おそらく、名前を調べるか、を使用してinstanceof)。objクラスに共通の基本クラス(またはそれらが実装するインターフェース)があり、それがサブクラスであることだけを知っていると、より簡単に使用できます。

これは、クラスにデフォルトのコンストラクターがある場合にのみ機能します。それ以外の場合は、リフレクションを使用してコンストラクターメソッドのインスタンスを取得し、適切な引数を使用して呼び出す必要があります。

于 2013-01-20T04:05:36.673 に答える
3

クラスに引数のないコンストラクターがある場合、そのパッケージ修飾クラス名(たとえば、「java.lang.Integer」)からオブジェクトを作成するには、通常、次のメソッドを使用します。

Class.forName
Class.newInstance


For e.g MusicClass mObj = Class.forName(<string name>).newInstance();

引数をコンストラクターに渡す必要がある場合は、代わりに次の選択肢を使用できます。

Class.getConstructor
Constructor.newInstance
于 2013-01-20T04:09:09.200 に答える
0

3つの文字列を保持するために文字列配列を使用できます

String names[]= {"com.example.adapters.Music","com.example.adapters.Video","com.example.adapters.Photo"};
于 2013-01-20T04:08:34.860 に答える