[英]Create Objects Dynamically in Java
有一種(更好的)動態創建對象的方法嗎?
現在,我正在使用一個簡單的“工廠模式”解決方案,如下所示:
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();
}
此代碼不是工廠模式,並且沒有創建對象。 您評估類名稱並在類上調用靜態方法。
現在看起來您有一個對象( generalObject
),並想要創建一個相同類型的新實例。 如果所有可能的類型都有一個公共的默認構造函數(約定!),則可以使用此函數基於給定的對象創建一個新實例:
Object newObject = generalObject.getClass().newInstance();
(但也許我還是不明白你的想法...)
您可以在這里使用反射,例如
final Class<?> clazz = generalObject.getClass();
final Method method = clazz.getMethod("fromByteArray", data.getClass());
return method.invoke(null, data);
應該做。
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.