2012-01-26 8 views
-2
public Gameplay instantiateGameplay(Class<? extends Gameplay> clazz) { 
    try { 
     Constructor<? extends Gameplay> constructor; 


     constructor = clazz.getConstructor(new Class<?>[] { Game.class }); 
     return constructor.newInstance(new Object[] { this }); 
    } catch (Exception e) { 
     Log.e(TAG, "Instantiate gameplay '" + clazz.getSimpleName() + "' failed.", e); 
     throw new RuntimeException(e); 
    } 
} 

通常、新しいクラスをインスタンス化するとき、コンストラクタはクラスファイル内にあります。これは何ですか?clazz.getConstructor(new Class [] {Game.class})のこと?それは奇妙に見えます。その理由は何ですか?コンストラクタについての次のアンドロイドコードを理解してください

答えて

1

職場でのJava反射です。

1

これは、実行時にのみ使用できるクラス/オブジェクトに関する情報を取得するためにJavaリフレクションAPIを使用しています。特に、このメソッドは、GamePlayから拡張されたオブジェクトのジェネリック型であると宣言された引数をとります。多くのクラスの一つは、実行時に、渡される可能性があるため、コード

constructor = clazz.getConstructor(new Class<?>[] { Game.class }); 
     return constructor.newInstance(new Object[] { this }); 

グラブは、渡された実引数のコンストラクタを保持し、それを持つオブジェクトの新しいインスタンスを作成します。

関連する問題