2011-07-29 4 views
0

Я хотел бы создать экземпляр объекта универсального класса во время выполнения; Я вызываю метод, который возвращает мне Type Object; Я хотел бы преобразовать этот общий класс в определенный класс, а затем создать объекты этого класса. Является ли это возможным? Я писал в Java:Runtime Casting объекта Type

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

Метод getDbConnectionProviderClass() возвращает объект класса, который преобразуется на время выполнения; В моем приложении C# этот метод возвращает объект Type; можно ли преобразовать это в DBConnectionProvider и создать экземпляр класса? Спасибо за ответ.

+1

Почему это помечено "Java"? – driis

+0

@driis «Я писал на Java:« с примером Java? –

+0

Что делать, если у меня есть общий класс расширенный, например Класс dbConnectionProviderExtClass = (Класс ) getDbConnectionProviderClass()) –

ответ

0

После того, как у вас есть объект типа нужно просто позвонить:

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

или, если вам нужно предоставить аргументы конструктора:

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

А затем отливали к вашему типу.

+0

Вы имеете в виду объект типа, не так ли? –

+0

Да, я отредактировал – jaywayco

+0

Что делать, если вместо класса У меня есть класс ? –

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; 
    } 
}