我正在编写一个程序,其中包含一系列类,这些类将被序列化以保存在数据库中并通过网络发送。
为了便于通过命令行界面访问类属性,我正在考虑将属性存储在Map类中,而不是为每个属性提供它自己的变量。
基本上,不要使用这样的东西:
String id = account.getUserId();
我会这样做
String id = account.properties.get("userId");
这是一种明智的做事方式吗?
答案 0 :(得分:2)
是的,这是一个非常明智的模型。它有时被称为“prototype object model”,与您在JavaScript中的工作方式非常相似,其中每个对象实际上都是Map。这反过来导致了非常流行的JSON序列化格式。
好的功能:
潜在风险/下行风险:
我实际上在90年代使用变体og这个对象模型(Tyrant)编写了整个游戏,并且效果非常好。
您可能需要考虑封装此功能,而不是让Map对象暴露,以便您可以在对象本身上使用访问器方法,例如。
String id = account.getProperty("userId");
答案 1 :(得分:2)
我喜欢这样做通常是这样的:
enum StringPropertyType {
USERID, FIRSTNAME, LASTNAME
}
interface StringAttributes {
String get(StringPropertyType s);
void put(StringPropertyType s, String value);
}
class MapBasedStringAttributes implements StringAttributes {
Map<StringPropertyType, String> map = new HashMap<~>();
String get(StringPropertyType s) { return map.get(s); }
void put(StringPropertyType s, String value) { map.put(s,value); }
}
这为您提供了编译时的安全性,重构等。
你也可以使用stringPropertyType.name()来获取枚举值的字符串表示并使用
Map<String,String>
代替..