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