是否有(更好的)动态创建对象的方法?
现在我正在使用一个简单的“工厂模式”解决方案:
String classType = generalObject.getClass().toString();
if(classType.equals("class be.testApp.UserObject")) {
return UserObject.fromByteArray(data);
//return new UserObject();
}
else if(classType.equals("class.be.testApp.NewsObject")) {
return NewsObject.fromByteArray(data);
//return new NewsObject();
}
答案 0 :(得分:6)
此代码不是工厂模式,也不会创建任何对象。您评估类名并在类上调用静态方法。
现在看起来你有一个对象(generalObject
)并且想要创建一个相同类型的新实例。 如果所有可能的类型都有一个公共默认构造函数(约定!),那么您可以使用它来创建基于给定对象的新实例:
Object newObject = generalObject.getClass().newInstance();
(但也许我仍然没有得到你的想法......)
答案 1 :(得分:1)
你可以在这里使用反射,比如
final Class<?> clazz = generalObject.getClass();
final Method method = clazz.getMethod("fromByteArray", data.getClass());
return method.invoke(null, data);
应该这样做。
答案 2 :(得分:0)
String classType = generalObject.getClass().toString();
if(classType.equals("class be.testApp.UserObject")) {
return UserObject.fromByteArray(data);
}else if(classType.equals("class.be.testApp.NewsObject")) {
return NewsObject.fromByteArray(data);
}
这非常复杂。因为显然这两个类都在你的编译类路径上,所以只使用类对象,而不是它们的字符串表示:
Class<?> classType = generalObject.getClass();
if(UserObject.class.equals(classType)) {
return UserObject.fromByteArray(data);
}else if(NewsObject.class.equals(classType)) {
return NewsObject.fromByteArray(data);
}