2011-07-29 9 views
0

実行時にジェネリッククラスのオブジェクトをインスタンス化したいと思います。私はTypeオブジェクトを返すメソッドを呼び出します。このジェネリッククラスを特定のクラスに変換し、このクラスのオブジェクトをインスタンス化したいと思います。出来ますか?私はJavaで記述するために使用:タイプオブジェクトの実行時キャスト

Class<DBConnectionProvider> dBConnectionProviderClass = 
       (Class<DBConnectionProvider>)Configuration.getInstance().getDbConnectionProviderClass(); 

方法getDbConnectionProviderClass()実行時に変換されたClassオブジェクトを返します。私のC#アプリケーションでは、このメソッドはTypeオブジェクトを返します。 DBConnectionProviderでこれを変換し、これのクラスをインスタンス化することは可能ですか?あなたの答えをありがとう。

+1

に、これは "Javaの" タグ付けされたのはなぜ? – driis

+0

@driis「私はJavaで書いていました。 –

+0

genericクラスを拡張した場合、どうすればいいですか? Class <? DBConnectionProvider> dbConnectionProviderExtClass = (クラス<?extends DBConnectionProvider>)getDbConnectionProviderClass() –

答えて

0

あなたがタイプのオブジェクトを持っていたら、あなただけ呼び出す必要があります:

object o = Activator.CreateInstance([your type]).Unwrap(); 

か、コンストラクタの引数を供給する必要がある場合:

object o = Activator.CreateInstance([your type], obj1,obj2...).Unwrap(); 

そして、あなたのタイプにキャスト。

+0

あなたは型オブジェクトを意味しますか? –

+0

はい、編集しました – jaywayco

+0

クラスの代わりにクラス<? DbConnectionProvider>を拡張しますか? –

0

反射したクラスのインスタンスを作成する簡単な例(Java)の

import java.awt.Rectangle; 

public class SampleNoArg { 

    public static void main(String[] args) { 
     Rectangle r = (Rectangle) createObject("java.awt.Rectangle"); 
     System.out.println(r.toString()); 
    } 

    static Object createObject(String className) { 
     Object object = null; 
     try { 
      Class classDefinition = Class.forName(className); 
      object = classDefinition.newInstance(); 
     } catch (InstantiationException e) { 
      System.out.println(e); 
     } catch (IllegalAccessException e) { 
      System.out.println(e); 
     } catch (ClassNotFoundException e) { 
      System.out.println(e); 
     } 
     return object; 
    } 
}