我試圖編寫一個interface
我想要爲Datamodel-Classes實現。
爲此,我想在interface
內部使用enum
,所以我知道我需要稍後實施它。
例子:包含一個空Enum的Java接口
public interface MyModelInterface {
public enum Field;
public Object get(Field field);
public void set(Field field, Object value);
}
預期實現:
public class MyModel implements MyModelInterface {
public enum Field {
ID("id"),
Name1("Name1"),
Name2("Name2");
private String field;
private Field(String field) {
this.field = field;
}
}
public Object get(Field field) {
//...
}
public void set(Field field, Object value){
//...
}
public static void main(String[] args) {
MyModel myModel = new MyModel();
System.out.println(myModel.get(MyModel.Field.ID));
System.out.println(myModel.get(MyModel.Field.Name1));
}
}
因爲我不知道哪個領域模型將包含直到我實現它。 我做了一些研究,並認爲enum
不能擴展,所以我意識到這一點。 是否有任何方法來存檔此或任何類型的解決方法?
我不想使用String
getter/setter的參數避免使用錯誤值的方法。
在此先感謝您的任何建議。
更新:
因此,這是對我工作:三個部分,其中包括一個abstract class
分割接口/類:
接口:
public interface MyModelInterface<E extends Enum<E>> {
public Object get(E field);
public void set(E field, Object value);
}
抽象類:
public abstract class MyAbstractModel<E extends Enum<E>> implements MyModelInterface<E>{
protected final EnumMap<E, Object> fields;
public MyAbstractModel(Class<E> enumKlazz) {
fields = new EnumMap<>(enumKlazz);
}
@Override
public Object get(E field) {
return fields.get(field);
}
@Override
public void set(E field, Object value) {
this.fields.put(field, value);
}
}
班(其中我實際存檔我的目標):
public class MyModel extends MyAbstractModel<MyModel.Field> {
public MyModel() {
super(MyModel.Field.class);
}
public enum Field {
ID("ID"),
Name1("NAME1"),
Name2("NAME2"),
Age("AGE"),
;
private final String field;
private Field(String field) {
this.field = field;
}
public String getName() {
return field;
}
}
public static void main(String[] args) {
MyModel myModel = new MyModel();
System.out.println(myModel.get(Field.Name1));
}
}
也許創建帶有許多常量的'abstract'類可能適合你? – Dragondraikk 2015-03-31 08:37:00
我也考慮過這種情況,但只有在包含字段的模型類似時纔有效。客戶和供應商。儘管如果我使用String常量,仍然可以使用其他值的方法,例如:「setValue(」anyString「,」Testvalue「);」我想避免使用'enum'。 – KnusperPudding 2015-03-31 08:43:42