我想以动态方式创建一个对象,我使用以下代码:
// 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());
这可能吗?以及如何实现这一目标?
提前谢谢。答案 0 :(得分:0)
您需要编写一个类文件列表来创建动态对象。我要做的是创建一个Map,它将类名作为键,对象作为值。他们我称之为地图并获得对象。
答案 1 :(得分:0)
不确定这是不是你的意思,但你可以使用以下名称从名字中获取一个类实例:
Class.forName("deleteMe").newInstance();
假设您的类有一个空构造函数。 如果你想使用参数化构造函数:
Class.forName("deleteMe").getConstructor(...).newInstance(...);
答案 2 :(得分:0)
我认为你可以在这里使用泛型......例如
MyClass <T extends Object>
然后你可以使用通配符来访问它们,而无需关心它们的类型。
MyClass<?> myClass;
答案 3 :(得分:0)
查看反射包和Class类。他们有从现有类定义创建对象的方法。
Object o = Class.forName(ObjectNameArray[1]).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();
}