私はJobModelというJavaクラスを持っていますが、IModelインタフェースを実装しています。このモデルには1つのアイテムが含まれます。以下を行う方法
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;
}
私はGeneric TypeをとるBaseControllerというコントローラを持っています。このコントローラはIOnAsyncResultとIControllerを実装します。どちらも私がセットアップしたカスタムインターフェイスです。
私がしようとしているのは、以下の実装があるAPIを呼び出すためのプロセスにフックできるフレームワークを実装することです。
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オブジェクトがで処理されます。ここでは
がある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機能で処理されたAPIから呼び出される関数であり、 ProcessJsonObjectは次のとおりです。
public IModel<T> ProcessJsonObject(JSONObject o) {
return model.Instantiate(o);
}
モデルフィールドはクラスですフィールドは、コントローラのコンストラクタでインスタンス化されます。コントローラは、ベースコントローラクラスを拡張します。
これはすべてのモデルで、リスト、を除いて、正常に動作し、かつ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.
}
はどのようにして、現在のセットアップのためのゲッター/セッターの機能にアクセスするか、このような疎結合なフレームワークを達成するために適切な設定で何ですか?