簡體   English   中英

用Java動態創建對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM