2011-07-29 334 views
0

我想在運行時實例化一個泛型類的對象;我打電話給我一個類型對象的方法;我想將此泛型類轉換爲特定的類,然後實例化此類的對象。可能嗎?我用Java編寫:運行時類型對象的鑄造

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

getDbConnectionProviderClass()方法返回在運行時轉換的Class對象;在我的C#應用​​程序中,此方法返回一個Type對象;是否有可能在DBConnectionProvider中將其轉換並實例化一個類?謝謝您的回答。

+1

爲什麼這個標籤的 「java」 的簡單的例子嗎? – driis

+0

@driis「我以前用Java寫的:」用Java的例子? –

+0

如果我有一個擴展的通用類,如 Class <?擴展DBConnectionProvider> dbConnectionProviderExtClass = (Class <?extends DBConnectionProvider>)getDbConnectionProviderClass()) –

回答

0

一旦你的類型的對象,你只需要調用:

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

,或者如果您需要提供構造函數的參數:

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

然後投射到您的類型。

+0

您的意思是類型對象,不是嗎? –

+0

是的,我編輯 – jaywayco

+0

如果不是類我有Class <?擴展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; 
    } 
}