- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在读这本书(《深入浅出面向对象设计与分析》)。在第 5 章中有一个建议,我想对此有一些其他的看法。书上说:
"When you have a set of properties that vary across your objects, use a collection, like a Map to store those proeprties dynamically."
此外,还有一些解释为什么要这样做:
"You'll remove lots of methods from your classes, and avoid having to change your code when new properties are added to your app".
我确实了解这种方法的优势,但是否也可以缩减规模?我的意思是,如果我使用映射来存储这些信息(在示例中它是一个字符串到枚举映射)并提供一个 getProperty(String) 方法来访问,则该方法的调用者实际上必须知道允许使用哪些字符串。我不喜欢这个。我的意思是,您当然可以争辩说可以在允许输入的 javadoc 中说明。
这真的是处理此类问题的方法吗?还有其他选择吗?我知道用继承来做这件事并不好,因为有大量的子类,而这些子类不会覆盖任何东西,只是添加新的属性,这在我看来并不是那么好。
最佳答案
我个人认为使用 Map
而不是实际字段是一个糟糕的主意。我不幸地使用了广泛采用这种(反)模式的系统,维护起来简直是一场噩梦。
我认为绝对没有理由使用映射来“面向 future ”,您可以避免必须添加新方法的论点是可笑的,尤其是当您考虑到添加一个新字段需要大约 20 次击键、添加 getter 和 setter 时再点击 3-4 次鼠标。你得到的是什么,你失去的是类型安全和编译时检查,控制和监视设置内容和时间的能力,更不用说你破坏了封装原则。
还应该注意到,Java 语言本身的发展一直在朝着越来越多的编译时检查方向发展,枚举和泛型是这个方向最明显的例子。全部扔掉比1.3-1.4时代还惨
只有当某些东西是真正动态的时候才应该使用映射,也就是说,在编译时不可能知道键列表。
关于java - 关于封装的问题(Book : HF OOA&D ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035633/
我正在读这本书(《深入浅出面向对象设计与分析》)。在第 5 章中有一个建议,我想对此有一些其他的看法。书上说: "When you have a set of properties that vary
我正在阅读“Head First OOA&D”这本书。有代码示例。我无法接受下一个解决方案: 如果系统中存在实体层次结构,建议使用属性映射而不是编写整个类树。 例如:带有属性图的单元: public
我是一名优秀的程序员,十分优秀!