我有一個名爲JobModel的java類,它實現了接口IModel。該模型包含一個項目。如何做到以下
public interface IModel<T> { T Instantiate(JSONObject o); }
引用的函數在JobModel類中看起來像這樣。
public IModel<JobModel> Instantiate(JSONObject o) {
JobModel j = new JobModel();
try {
j.setID(o.getInt("ID"));
j.setName(o.getString("Name"));
j.setDescription(o.getString("Description"));
}
catch (Exception e) { e.printStackTrace(); }
return j;
}
我有一個名爲BaseController的控制器,它採用通用類型。該控制器實現IOnAsyncResult和IController。這兩個都是我設置的自定義界面。
我想要做的是實現一個框架,允許我鉤入調用API的過程,我有我有以下實現。
這裏是從API的AsyncTask類
public void onResultSuccess(int resultCode, JSONArray results) {
ProcessJsonArray(results);
try { if (this.viewDelegate != null) this.viewDelegate.InterfaceUpdate(list); }
catch (Exception e) { e.printStackTrace(); }
}
JSON數組在ProcessJsonArray函數處理調用的函數,它是:
public void ProcessJsonArray(JSONArray a) {
for (int i=0; i < a.length(); i++) {
try { list.add(this.ProcessJsonObject(a.getJSONObject(i))); }
catch (Exception e) { e.printStackTrace(); }
}
}
各個JSON對象在處理ProcessJsonObject,它是:
public IModel<T> ProcessJsonObject(JSONObject o) {
return model.Instantiate(o);
}
模型字段是一個類字段,它在Controller的構造函數中實例化,特定於擴展基本控制器類的控制器。
這一切工作正常,但,模型,列表和resultsList都設置這樣:
public ArrayList<IModel<T>> list;
public ArrayList<IModel<T>> resultsList;
public IModel<T> model;
我找到了挑戰,當我嘗試與任何性質的工作。例如,當我使用Job Controller設置迭代列表屬性時,我無法訪問作業模型的Getter和Setter函數。迭代的設置如下:
for (IModel<JobModel> j : list) {
if (j.getName().contains(Value)) { addToResultsList(j); }
//Additional else/if statements removed for bravity.
}
你如何訪問的getter/setter功能的當前設置,或什麼是適當的設置來完成這樣一個鬆耦合的架構?