簡體   English   中英

從超類返回擴展類的新實例

[英]Return new instance of extending class from superclass

我正在構建一個具有多個擴展“模型”類的Android應用程序。

這是我現在的代碼:

public class Model {

    protected int mId;

    public int getId() { return mId; } 

    public Model(JSONObject json) {
        try {
            mId = json.getInt("id");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    public Class<? extends Model> getBy(String property, String value) {
        // should return new instance of extending class
        return null;
    }

}

public class Song extends Model {

    protected String mName;
    protected String mArtist;
    protected int mDuration;

public String getName() { return mName; }
public String getArtist() { return mArtist; }
public int getDuration() { return mDuration; }

    public Song(JSONObject json) {
        super(json);

        try {
            mName = json.getString("name");
            mArtist = json.getString("artist");
            mDuration = json.getInt("duration");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

}

我正在嘗試在Model類中創建一個方法,以返回擴展它的類的新實例。

這個想法是,多個類可以擴展Model類,即Artist,Album。 這些類應具有“ getBy”方法,該方法將返回不是Model類的實例,而是Artist,Album等類的實例。

干得好:

public <T extends Model> T getBy(Class<T> clazz, JSONObject json) throws Exception
{
    return clazz.getDeclaredConstructor(json.getClass()).newInstance(json);
}

然后像這樣使用它:

Model model = ...;
Song song = model.getBy(Song.class, someJson);

您需要實現“工廠模式”。

制作一個靜態方法:

public class Song extends Model {

...
    public static Song createSong() {
       return new Song(...);
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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