As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




已关闭8年。




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

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

最佳答案

好吧,一般约定是使用get...set...,因此is...只是 boolean 值的一个异常(exception)。对于is...,约定很容易:您需要返回一个 boolean 值,可以跳过getter,并且相应的setter也将采用 boolean 值参数。has...的约定会更加困难:has...将返回 boolean 值,但是您仍然需要处理不同类型的getter和setter。因此,has...不能代替get...代替is...,并且由于JavaBeans约定的这一部分通常仅是关于getter和setter的,因此has...不适合在那里。
根据JavaBeans规范:

使用has...访问的任何属性都不会持久化,也不会通过其getter方法访问。
示例:如果某人具有car属性,则您希望有一个getCar()访问器。 hasCar()不会是访问器,因为派生的属性hasCar将需要一个名为getHasCar()isHasCar()的访问器。如果has是访问者前缀,则该属性的名称将发生冲突car

10-06 05:30