現在いくつかのクラスにいくつかの列挙型が定義されています。それらはすべて、以下に示すものと同じように見える:ApaMessageで定義された方法も異なるタイプの列挙型を処理する抽象基本クラスを作成する
public class ApaMessage {
private String apaMessage;
private final int FIXED_LENGTH_SIZE=39;
public enum ApaFields {
FIELD1(ApaUtils.ApaFieldTypes.POSITION_BASED, null, "field1", 2, 3, false, false),
private final ApaUtils.ApaFieldTypes type;
private final String ApaName;
private final String jsonName;
private final int start;
private final int finish;
private boolean required = false;
private boolean withDelimiter = false;
ApaFields(ApaUtils.ApaFieldTypes type, String ApaName, String jsonName, int start, int finish, boolean required, boolean withDelimiter) {
this.type = type;
this.ApaName = ApaName;
this.jsonName = jsonName;
this.start = start;
this.finish = finish;
this.required = required;
this.withDelimiter = withDelimiter;
}
}
があります:コードの多くはありませんが、問題がある
private HashMap<String,Object> getApaJsonFieldsAndValues() {
HashMap<String, Object> jsonApaData = new HashMap<String, Object>();
for (ApaFields field : ApaFields.values()) {
jsonApaData.put(field.jsonName, getApaFieldValue(field));
}
return jsonApaData;
}
が、私はすぐに持っていますこれらの列挙体の10〜20。私はHashMapメソッドと他の同様のメソッドが含まれる抽象基本クラスを作成したいと思います。基本クラスは、ApaFields列挙型およびその他の列挙型を受け入れ、getApaJsonFieldsAndValuesの機能を実行する必要があります。問題は、ベースクラスが、渡された列挙型の値とjsonNameなどの内部フィールドにループでアクセスするにはどうすればよいのでしょうか?
私はさまざまなアプローチを試みましたが、主な問題は基本クラスが値にアクセスできないように見えることです。これを回避する方法はありますか?あるいは、より良いアプローチがありますか?おかげ
はEDIT:
基本的に私は、基本クラスでは、このような何かをしたいと思います。以下はコンパイルされないことに注意してください。 ApaFieldsは上記で定義されたインナー列挙され
次いでパブリック抽象クラスApaRequestMessage {
private Class<? extends Enum<?>> apaRequestMessageFields;
private String apaMessage;
public <T extends Enum<T>> void ApaRequest(Object apaRequestFields, String apaMessage) {
apaRequestMessageFields = (Class<? extends Enum<?>>) apaRequestFields;
this.apaMessage = apaMessage;
for (Field field: apaRequestMessageFields.values()) {
//this doesn't work because it cannot access the values of apaRequestMessageFields
}
}
}
、以下のように基本メソッドを呼び出し、これが正しいかどうかわからないが、。
ApaRequest(ApaFields.class, somestringmessage);
あなたが試したことを私たちに教えてください。 –
あなたの例が誤解を招かない限り、内部の列挙型を使用するべきではないと思います。すべてのFIELDを保持する外部定義の列挙を使用するか、各クラスのプライベートフィールドとして単一のFIELDを宣言します。 – Aaron
enumは共通インターフェイスを実装する必要があり、ハッシュマップを返すメソッドでのみそのインターフェイスで作業する必要があります。 – dumitru