java - map 与类属性建议

标签 java properties

我正在编写一个包含一堆类的程序,这些类将被序列化以保存在数据库中并通过网络发送。

为了更容易通过命令行界面访问类属性,我正在考虑将属性存储在 Map 类中,而不是为每个属性提供自己的变量。

基本上,而不是使用这样的东西:

String id = account.getUserId();

我会这样做

String id = account.properties.get("userId");

这是一种明智的做事方式吗?

最佳答案

是的,这是一个非常合理的模型。它有时被称为“prototype object model”并且与您在 JavaScript 中的工作方式非常相似,其中每个对象实际上都是一个 Map。这反过来又导致了非常流行的 JSON 序列化格式。

不错的功能:

  • 您不必担心困惑的继承层次结构 - 您可以随意更改属性。
  • 您可以通过从另一个对象(原型(prototype))复制来创建一个新对象
  • 操作数据的代码可以采用统一的方式,而无需显式命名所有变量。
  • 与静态类定义相比,它更“动态”- 很容易扩展和修改您的对象

潜在风险/缺点:

  • 如果您使用字符串,您需要跟踪您的属性名称——编译器不会为您做这件事!这个问题可以通过使用枚举作为键来缓解,但是你会失去一些灵 active ......
  • 您没有得到静态类型检查的好处,因此您可能会发现您需要编写更多的 JUnit 测试来确保一切正常工作
  • 有轻微的性能开销(虽然可能不足以担心,因为 map 查找非常快)

实际上,我在 90 年代使用此对象模型的变体 (Tyrant) 编写了整个游戏,并且运行良好。

但是,与其公开 Map 对象,不如考虑封装此功能,以便可以在对象本身上使用访问器方法,例如

String id = account.getProperty("userId");

关于java - map 与类属性建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10646522/

相关文章:

java - 如何通过迭代具有数组值的 for 循环来填充 JTable

java - 自定义 View 到现有 View

c# - 为什么在 Entity Framework 模型定义中使用 'virtual' 作为类属性?

java - 为 JanusGraph 提供属性值时,只有前 20 个字符作为值存储在使用 Java 的属性中

java - 在 tomcat 中重新部署新版本的 .war 时更改属性值

java - 不使用 MNIST 的 Tensorflow 初学者示例

java - NumberFormatException:无法将 '' 解析为整数

Java并发: CopyOnWriteArrayList behavior

c++ - 蓝牙设备本地名称

javascript - 使用局部变量(而不是重复的属性访问)是否会损害性能?