目前我有几个类定义了几个枚举。他们都看起来类似下图所示:创建一个抽象基类来处理不同类型的枚举
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