JavaBeans 方法的签名必须遵循某些约定,例如 set.../get... 等。他们有一个约定是......例如isEven()
可以是一个 Integer 类测试布尔值的方法。但后来我想知道为什么 not have... 也是一个合法的标识符,因为对我来说测试某些东西有什么是有意义的,例如hasCar()
Person 类或类似的东西。
你明白我的问题吗?你怎么看?
好吧,一般约定是使用get...
,set...
因此is...
只是布尔值的一个例外。因为is...
约定很简单:您需要返回一个布尔值,可以跳过 getter,相应的 setter 也将采用布尔参数。
for 的约定has...
会更加困难:has...
会返回一个布尔值,但您仍然需要一个处理不同类型的 getter 和 setter。因此has...
不能替代get...
相反is...
,因为 JavaBeans 约定的那部分通常只涉及 getter,而 setterhas...
不适合其中。
来自 JavaBeans 规范:
属性是 Java Bean 的离散的、命名的属性...
属性以多种方式显示:
- ...
- 其他组件可以通过调用它们的getter 和setter方法以编程方式访问属性(参见下面的第 7.1 节)。
- ...
任何被使用的属性has...
都不会是持久的,也不会被它的 getter 方法访问。
例子:如果一个人有一个car
属性,你会期望有一个getCar()
访问器。hasCar()
不会是访问器,因为派生属性hasCar
需要一个名为 getHasCar()
or的访问器isHasCar()
。如果has
是访问器前缀,则该属性将具有冲突的名称car
。
get/set
而is/set
布尔类型只是惯例。我同意有时调用 getter 更具可读性hasSomething
。例如hasChildren()
. 但是让我们继续说调用方法canWrite()
或等是willFly()
可以的providesResult()
。您可以使用这样的名称,但这些名称不遵循 java bean 约定,因此不会被 java bean 框架识别为 getter。
Java Beans 是多年前发明的。定义注解@Setter
和@Getter
. 如果这些注解变得普遍,所有的 java bean 框架都可以支持它们,程序员将能够根据需要调用 getter,但用注解标记它们@Getter
。但是现在不支持这样的注释,所以唯一的建议是遵循现有的命名约定。
我认为这根本不是一个坏问题!我也想过这一点,发现人们确实像您打算使用它一样使用它。只是大多数库(比如您可能使用的库)没有。
我同意它应该对布尔属性有效。