1

'Model'クラスを拡張する複数のクラスを持つ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を拡張できるということです。これらのクラスには、Modelクラスではなく、Artist、Albumなどのクラスのインスタンスを返す「getBy」メソッドが必要です。

4

2 に答える 2

1

どうぞ:

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);
于 2013-02-14T01:03:18.953 に答える
0

「ファクトリパターン」を実装する必要があります。

静的メソッドを作成します。

public class Song extends Model {

...
    public static Song createSong() {
       return new Song(...);
}
}
于 2013-02-14T00:42:00.507 に答える