目前我有幾個類定義了幾個枚舉。他們都看起來類似下圖所示:創建一個抽象基類來處理不同類型的枚舉
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;
}
}
也有在ApaMessage定義的方法:
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)來執行循環?
我已經嘗試了不同的方法,但主要問題是基類似乎無法訪問值。有沒有辦法解決?或者,有沒有更好的方法?由於
編輯:
基本上我想在基類中是這樣的。請注意下面的代碼不能編譯。
公共抽象類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
}
}
}
然後調用基方法如下,雖然不知道,如果這是正確的,其中ApaFields是以上所定義的內枚舉。
ApaRequest(ApaFields.class, somestringmessage);
告訴我們你試過的東西。 –
除非您的示例具有誤導性,否則我認爲您不應該使用內部枚舉。我要麼使用一個外部定義的枚舉來存放所有的FIELDS,要麼在每個類上聲明一個字段作爲私有字段 – Aaron
也許你的枚舉應該實現一個通用接口,並且你只能在返回哈希映射的方法中使用該接口。 – dumitru