java - 为什么 "has"不是有效 JavaBean 方法签名的开头?

标签 java javabeans

<分区>

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

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

最佳答案

嗯,一般约定是使用 get...set... 因此 is... 只是一个 boolean 值的异常(exception)。对于 is... 约定很简单:您需要返回一个 boolean 值,可以跳过 getter,相应的 setter 也将采用 boolean 参数。

has... 的约定会更困难:has... 会返回一个 boolean 值,但您仍然需要一个 getter 和 setter 来处理不同种类。因此 has... 不能替代 get... 而不是 is... 并且因为 JavaBeans 约定的这一部分通常只是关于 getter 和 setter 有... 不适合那里。

来自 JavaBeans 规范:

Properties are discrete, named attributes of a Java Bean...

Properties show up in a number of ways:

  1. ...
  2. Properties can be accessed programmatically by other components calling their getter and setter methods (see Section 7.1 below).
  3. ...

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

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

关于java - 为什么 "has"不是有效 JavaBean 方法签名的开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11934866/

相关文章:

Java客户端-服务器无法让服务器继续发送正确的信息

java - 如何读取和计算互联网上文​​件的哈希值

java - 是否可以将 HTML 参数与列表中的 Java Bean 变量进行比较?

java - 监控 Bean 的变化以构建增量?

java - EJB Java : Better to use Session beans or message driven beans

文本编辑器上的 Java swing

java - 查找 n :th word in a string

java - 基元数组是作为对象(通过引用)还是通过值分配给变量?

jsp - 如何在jsp中设置request.getParameter :setProperty

java - 学习 "large-scale"Java技术