为什么不“有”……有效的JavaBean方法签名的开头?

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

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

嗯,一般约定是使用get...set...因此is...只是布尔值的一个例外。 对于is...约定很简单:你需要返回一个布尔值,可以跳过getter,相应的setter也会得到一个布尔参数。

for has...的约定会更加困难: has...会返回一个布尔值,但你仍然需要一个处理不同类型的getter和setter。 因此has...不是替换get...而不是is...而且因为JavaBeans约定的那部分通常只是关于getter和setter has...不适合那里。

来自JavaBeans规范:

属性是离散的,Java Bean的命名属性…

属性以多种方式显示:

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

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

示例:如果某人拥有car财产,您可能会拥有一个getCar()访问者。 hasCar()不会是一个访问器,因为派生属性hasCar需要一个名为getHasCar()isHasCar() 。 如果has是一个访问者前缀,则该属性将具有冲突的名称car

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

Java Bean是很多年前发明的。 可能定义注释@Setter@Getter并不是一个坏主意。 如果这些注释变得普遍,那么所有java bean框架都可以支持它们,程序员可以根据需要调用getter,但使用注释@Getter标记它们。 但是现在不支持这样的注释,因此唯一的建议是遵循现有的命名约定。

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

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