动态对象创建

时间:2013-02-13 08:30:33

标签: java object dynamic

我想以动态方式创建一个对象,我使用以下代码:

// Object technical name is xxxx.objectname

String[] ObjectNameArray;   
ObjectNameArray = ObjectName.split(".");

// if the objectname is for exaple deleteme Java should intrpet the code
// as follows deleteme DeletebleObject = new deleteme(getContext());

ObjectNameArray[1] DeletebleObject = new ObjectNameArray[1](getContext());

这可能吗?以及如何实现这一目标?

提前谢谢。

7 个答案:

答案 0 :(得分:0)

您需要编写一个类文件列表来创建动态对象。我要做的是创建一个Map,它将类名作为键,对象作为值。他们我称之为地图并获得对象。

答案 1 :(得分:0)

  1. 你的命名惯例倒退了。
  2. 不确定这是不是你的意思,但你可以使用以下名称从名字中获取一个类实例:

    Class.forName("deleteMe").newInstance();

  3. 假设您的类有一个空构造函数。 如果你想使用参数化构造函数:

    Class.forName("deleteMe").getConstructor(...).newInstance(...); 
    

答案 2 :(得分:0)

我认为你可以在这里使用泛型......例如

    MyClass <T extends Object>

然后你可以使用通配符来访问它们,而无需关心它们的类型。

    MyClass<?> myClass;

答案 3 :(得分:0)

查看反射包和Class类。他们有从现有类定义创建对象的方法。

Object o =  Class.forName(ObjectNameArray[1]).newInstance(); 

来自newInstance()

  

创建此Class对象表示的类的新实例。该类实例化为具有空参数列表的新表达式。如果尚未初始化,则初始化该类。   请注意,此方法传播由Nullary构造函数抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时异常检查,否则将由编译器执行。 Constructor.newInstance方法通过将构造函数抛出的任何异常包装在(已检查的)InvocationTargetException中来避免此问题。

答案 4 :(得分:0)

  

您可以使用Factory Design模式创建不同类型的动态对象       发送姓名

用于参考链接Factory Desing Pattern

答案 5 :(得分:0)

你应该看看Java“反射”机制,并动态创建/调用你需要的对象/方法。请参阅以下示例:

// - specifies which class (className) is to be loaded (e.g.: com.example.objectname)
Class<?> loca = Class.forName(className);
// - specifies method (methodName) to be used (e.g.: getContext)
// - assumes the method returns a "String" (String.class)
Method method = loca.getMethod(methodName, new Class[]{String.class});
// - creates a new instance of the class, i.e., an object
Object obj = loca.newInstance();
// - call the actual method in the function
String result = (String) method.invoke(obj, inputParameters);

希望它有所帮助。

答案 6 :(得分:0)

通过java反射:

    String[] objectNameArray;   
    objectNameArray = objectName.split(".");

    try {
        Class<?> clazz = Class.forName(objectNameArray[1]);
        Object context = getContext();
        Constructor<?> constructor = clazz.getConstructor( context.getClass() );
        Object instance = constructor.newInstance( context );

    } catch( ClassNotFoundException e ) {
        e.printStackTrace();
    } catch( SecurityException e ) {
        e.printStackTrace();
    } catch( NoSuchMethodException e ) {
        e.printStackTrace();
    } catch( IllegalArgumentException e ) {
        e.printStackTrace();
    } catch( InstantiationException e ) {
        e.printStackTrace();
    } catch( IllegalAccessException e ) {
        e.printStackTrace();
    } catch( InvocationTargetException e ) {
        e.printStackTrace();
    }