私は既存のプロジェクトにレストインターフェイスを構築しています。このプロジェクトには、約4種類の操作を定義するクラスがあります。各操作では、異なるタイプのオブジェクトを使用してクエリパラメータを定義します。各操作は異なるタイプのオブジェクトを返します。これらのオブジェクトはすべてXML jaxbでエンコードされたオブジェクトであり、最終的にOutputStreamにマーシャリングされます。Javaでジェネリッククラスを使用する適切な時期はいつですか?
私は、URLからパラメータを解析して、さまざまな操作に必要なクエリオブジェクトを構築しています。現在、私は抽象的なQuery親クラスを持っています、QueryFactoryクラスは、クエリの種類を切り替え、URLの要求の種類に固有の子Queryクラスを返します。すべての子問合せクラスは抽象的な「buildQueryParameters」メソッドを実装し、結果をObject型として取得します。
それは得意ですか?パラメータ化された型やジェネリッククラスを使用してクエリパラメータオブジェクトを構築する方法がありますか?私は私のサーブレットコードを検索するためのサブクラスです
:私は自分自身のリクエストタイプを区別するために、すべての私のコードの上にこれらのswitch文を構築し、私はそれが最善の方法だかどうかわからないんだけど...
編集見つけますこのように:
Query query = QueryFactory.getInstance(parameterMap, requestEnum);
query.buildQueryParams();
Object queryParams = query.getQueryParams();
クエリの工場は非常に単純です:
public static Query getInstance(Map<String, String> parameterMap, RequestEnum requestEnum) {
switch (requestEnum) {
case GETSTATUS: {
return new GetStatusQuery(parameterMap);
}
case DESCRIBEOPS: {
return new DescribeOpsQuery(parameterMap);
}
case GETSTATUSBYID: {
return new GetStatusByIdQuery(parameterMap);
}
case GETEVENTS: {
return new GetEventsQuery(parameterMap);
}
default:
break;
}
return null;
}
抽象Queryクラスでも退屈です:
public abstract class Query {
protected Map<String, String> validatedMap;
private Object queryParams;
public SOSQuery(Map<String, String> parameterMap) {
this.parameterMap = parameterMap;
}
public Object getQueryParams() {
return this.queryParams;
}
public abstract void buildQueryParams();
protected void setQueryParams(Object queryParams) {
this.queryParams = queryParams;
}
protected Map<String, String> getParameterMap() {
return this.parameterMap;
}
それぞれの子クラスはbuildQueryParams()メソッドを実装し、要求/操作のそれぞれ異なるタイプのために必要な特定のオブジェクトを作成し、オブジェクトとして返し、マーシャラーは問題の取り扱いを持っていないので、私は必ずしも必要としません戻り値の型をより具体的にする。
私たちにいくつかのコードを表示します。 –
なぜクエリのサブクラス(子クラス)があるのですか?パラメータ名のいくつかの定数を作成し、これらを使用してQueryFactory(実際は* factory(TM)*ではない)/それぞれのメソッドを設定して取得することができます。 –