为什么Java7中没有本机属性?
有没有合理的理由,为什么不成为Java 7的一部分?为什么Java7中没有本机属性?,java,properties,java-7,Java,Properties,Java 7,有没有合理的理由,为什么不成为Java 7的一部分? 时间不够 还没有正确的规格 由于java的实现,很难添加到java 认为不够重要(其他事情被优先考虑) 在Java中实现属性“正确”并不容易。雷米·福拉克斯的工作尤其有助于弄清楚这可能是什么样子,并揭示许多必须解决的“问题” 与此同时,Java7已经花了太长时间。闭包之争是一个巨大的、有争议的干扰,浪费了很多本来可以用来开发具有广泛支持共识的功能(如属性)的脑力。最终,决定将主要变更限制在模块化(项目拼图)。该语言只考虑“小变化”(在Coin
- 时间不够
- 还没有正确的规格
- 由于java的实现,很难添加到java
- 认为不够重要(其他事情被优先考虑)
JavaFX具有漂亮的属性支持,因此Sun清楚地了解属性的价值,并知道如何实现它们。但是由于JavaFX属性的破坏,开发人员不太可能满足于用Java实现一个半生不熟的实现。如果它们值得去做,那么它们就值得去做正确的事情。当然有一些与日程安排和资源相关的高层原因。实现属性并理解与其他语言特性的所有分支和交叉点是一项艰巨的任务,类似于各种Java5语言更改的规模 但我认为Sun不推出属性的真正原因与闭包是一样的: 1) 关于实施应该是什么样子,没有达成共识。或者更确切地说,存在许多相互竞争的替代方案,对属性充满热情的人对实现的关键部分意见不一 2) 也许更重要的是,对于是否需要该功能,人们缺乏共识。虽然很多人想要属性,但也有很多人认为它不是必需的或有用的(特别是,我认为服务器端的人认为属性对他们的日常生活的重要性远远低于swing程序员) 物业历史记录在此:
- 属性不是非常面向对象的。使它们易于编写会鼓励这样一种模式,即对象只提供其内部状态,而调用方对其进行操作。对象应该提供更高级的方法,并保持其内部私有。下一次当你无聊地实现一个吸气剂时,考虑调用方对数据的处理,以及你是否可以直接提供这些功能。
- 属性鼓励可变状态(通过setter),这会降低程序的并行性。随着内核数量的增加,我们都应该努力使我们的对象不可变,以使并发推理更容易。下一次当你无聊地执行一个设置程序时,考虑删除它并使对象不可变。
- 默认情况下,任何给定的事情都是“未完成”的,因此不需要特别的理由使某些事情保持未完成状态。相反,需要一些令人信服的理由将某些事情从“未完成”转移到“已计划”或“已完成”。此语言功能尚未出现足够令人信服的理由。还有两个理由可以避免使用任何语言的属性:
person.name=“Nimoy”代码>vs.person.setName(“Nimoy”)
和name=person.name
vs.name=person.getName()代码>我建议避免使用“不太面向对象”这一短语(在这一点上几乎毫无意义),但保留这两个要点(关于良好的设计,简单明了)。否则,读者会专注于自己对OOP的个人定义,而忽略这里真正要说的内容。