为什么不“有”……有效的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的命名属性…
属性以多种方式显示:
- …
- 可以通过调用其getter和setter方法的其他组件以编程方式访问属性(请参阅下面的第7.1节)。
- …
使用has...
访问的任何属性都不会持久存在,也不会被其getter方法访问。
示例:如果某人拥有car
财产,您可能会拥有一个getCar()
访问者。 hasCar()
不会是一个访问器,因为派生属性hasCar
需要一个名为getHasCar()
或isHasCar()
。 如果has
是一个访问者前缀,则该属性将具有冲突的名称car
。
get/set
和is/set
为布尔类型is/set
只是约定。 我同意有时候调用getter hasSomething
更具可读性。 例如hasChildren()
。 但是让我们继续说,调用方法canWrite()
或canWrite()
或willFly()
等是可以的。你可以使用这些名称,但这些名称不遵循java bean约定,因此不会被识别为getter by java bean框架。
Java Bean是很多年前发明的。 可能定义注释@Setter
和@Getter
并不是一个坏主意。 如果这些注释变得普遍,那么所有java bean框架都可以支持它们,程序员可以根据需要调用getter,但使用注释@Getter
标记它们。 但是现在不支持这样的注释,因此唯一的建议是遵循现有的命名约定。
我认为这根本不是一个坏问题! 我也考虑过这一点,并发现人们确实像你打算使用它一样使用它 。 只是大多数库(比如你可以使用的库)都没有。
我同意它应该对布尔属性有效。