拜托,不要试图用所有“唯一的访问者是正确的”谈话杀了我......我安静地来了:)
我只想问,主要的原因是Java Beans必须使用访问器,即使在只需要简单的属性访问的情况下也是如此。在某些情况下,我知道存取器是好事。但是,正如我最喜欢的文章所说,“不要使用访问器,除非你100%确定你需要的不仅仅是简单的属性访问,否则它们会浪费CPU和程序员时间。”
再次,请不要因为不使用访问器而攻击我。我只问,为了使用和创建适当的Java Bean,它是什么原因。为什么Oracle的人说让我们这样做...谢谢。
答案 0 :(得分:3)
Java bean是一种惯例。与Java bean一起使用的框架依赖于该约定的细节来可靠地操纵对象。
维基百科实际上有一个很好的解释:http://en.wikipedia.org/wiki/JavaBean
答案 1 :(得分:2)
使用访问器的主要原因是它可以在一个地方完全控制其修改。
我可以找到更多原因...... :)
IMHO使用访问器和mutator作为一种方法,使我们的代码更具可扩展性和灵活性
答案 2 :(得分:1)
实际上,如果Java bean遵循约定,那么它就是 bean :
所以这只是约定 ...
的问题答案 3 :(得分:1)
虽然这是原始Java Bean的要求,但按照惯例,值得注意的是,许多支持“bean”的库也将公共字段视为有效的访问者;并且通常还允许使用注释来指定非公共方法和字段。 这包括JAXB(用于XML-to-POJO数据绑定)和Jackson(JSON-to-POJO)等库。
因此,在某些方面,原始的Java bean'规范'(JDK javadocs中记录的约定)不再是那么相关了。
我认为大会的原作者只是觉得直接现场访问不是一个好习惯。 我个人认为有些情况下简单的不可变结构类很好,而且必须为getter(或者是可变的setter)编写猴子代码是非常愚蠢的。但是“Java结构”(只是数据,没有逻辑或者最多很少)和“真实”对象(状态和行为)之间存在着细微差别。
答案 4 :(得分:0)
如果您需要隐藏属性的详细信息,那么您将需要访问者。例如,有一个计算值(比如balanceDue),它是从另外两个实际属性(比如信用卡和借记卡)计算出来的,那么你可以在你的访问器中有代码进行计算。否则,您将需要在调用各个字段的每个客户端中进行计算。这是一个从逻辑的角度来看访问者有意义的例子。基本上,封装。
答案 5 :(得分:0)
通过使用访问器,您可以在获取/设置值时应用逻辑。它将bean与应用程序的其余部分隔离开来。
如果你需要改变bean的内部存储,你可以这样做,并且仍然保持相同的getter / settes。
例如:如果你有一个用于存储ip地址的类,你可能不会将它存储为Long值而不是String(为了效率)。您只需对一个类进行更改即可完成此操作。
另请查看GRASP,尤其是Information Expert