8

JavaBeans 方法的签名必须遵循某些约定,例如 set.../get... 等。他们有一个约定是......例如isEven()可以是一个 Integer 类测试布尔值的方法。但后来我想知道为什么 not have... 也是一个合法的标识符,因为对我来说测试某些东西有什么是有意义的,例如hasCar()Person 类或类似的东西。

你明白我的问题吗?你怎么看?

4

3 回答 3

5

好吧,一般约定是使用get...set...因此is...只是布尔值的一个例外。因为is...约定很简单:您需要返回一个布尔值,可以跳过 getter,相应的 setter 也将采用布尔参数。

for 的约定has...会更加困难:has...会返回一个布尔值,但您仍然需要一个处理不同类型的 getter 和 setter。因此has...不能替代get...相反is...,因为 JavaBeans 约定的那部分通常只涉及 getter,而 setterhas...不适合其中。

来自 JavaBeans 规范:

属性是 Java Bean 的离散的、命名的属性...

属性以多种方式显示:

  1. ...
  2. 其他组件可以通过调用它们的gettersetter方法以编程方式访问属性(参见下面的第 7.1 节)。
  3. ...

任何被使用的属性has...都不会是持久的,也不会被它的 getter 方法访问。

例子:如果一个人有一个car属性,你会期望有一个getCar()访问器。hasCar()不会是访问器,因为派生属性hasCar需要一个名为 getHasCar()or的访问器isHasCar()。如果has是访问器前缀,则该属性将具有冲突的名称car

于 2012-08-13T13:15:59.973 回答
1

get/setis/set布尔类型只是惯例。我同意有时调用 getter 更具可读性hasSomething。例如hasChildren(). 但是让我们继续说调用方法canWrite()或等是willFly()可以的providesResult()。您可以使用这样的名称,但这些名称不遵循 java bean 约定,因此不会被 java bean 框架识别为 getter。

Java Beans 是多年前发明的。定义注解@Setter@Getter. 如果这些注解变得普遍,所有的 java bean 框架都可以支持它们,程序员将能够根据需要调用 getter,但用注解标记它们@Getter。但是现在不支持这样的注释,所以唯一的建议是遵循现有的命名约定。

于 2012-08-13T13:27:59.013 回答
0

我认为这根本不是一个坏问题!我也想过这一点,发现人们确实像您打算使用它一样使用它。只是大多数库(比如您可能使用的库)没有。

我同意它应该对布尔属性有效。

于 2012-08-13T13:15:29.563 回答