对OCA上方法的JavaBeans命名约定的误解

时间:2017-01-19 10:02:13

标签: java naming-conventions javabeans

我们目前正在对OCA证书进行相同的测试,今天我们遇到了一个小问题。 我会尽量保持简短:

Which are methods using JavaBeans naming conventions for accessors and mutators?

(Choose all that apply)
A. public boolean getCanSwim() { return canSwim;}
B. public boolean canSwim() { return numberWings;}
C. public int getNumWings() { return numberWings;}
D. public int numWings() { return numberWings;}
E. public void setCanSwim(boolean b) { canSwim = b;}

答案(由OCA SE 8指定): C E

我们的讨论是在C点:

public int getNumWings (){return numberWings ;}

我的同事们的观点是,由于下面提到的规则,这是错误的。方法访问者必须 getNumberWings ,因此 C 点是错误的。我附上了OCA的规则表,它认为规则5是错误的。 PHOTO of Rules for JavaBeans naming convention on OCA SE 8 page 206

据我所知,该方法的名称不必尊重该属性。 你对此有何看法?

OCA Oracle认证助理Java SE 8程序员I学习指南考试1Z0-808

我试图找到一个正确的答案:

来自oracle的JavaBeans约定:http://download.oracle.com/otn-pub/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/beans.101.pdf?AuthParam=1484818426_7e07f5a35c14ebfbadb2c68798198d7e

JavaBeans约定(坚果壳中的Java)

2 个答案:

答案 0 :(得分:2)

你的同事(我认为)在辩论

public int getNumWings() { return numberWings;}

违反了JavaBean,因为字段名称和属性名称不同。

规范不支持。 Java bean约定(如编码here)状态:

  

6.2.2。属性

     

如果bean具有访问器方法,则bean定义类型为p的属性T   遵循这些模式(如果T是布尔值,则是一种特殊形式的getter   方法是允许的):

     

吸气剂

    public T getP()
     

布尔getter

    public boolean isP()
     

设置器

    public void setP(T)
     

例外

     

属性访问器方法可以抛出任何类型的已检查或未检查的异常

请注意,它没有说明保存属性值的(通常)private字段的名称。实际上,该领域可能甚至不存在......如果财产价值可以用其他方式表示。

答案 1 :(得分:0)

关于OCA,JavaBean规则是:

所有类属性,即具有getter和setter的实例变量,应遵循以下规则:

1)实例变量始终设置为私有:

private boolean happy;

private String name;

2)属性的mutator / setter方法的标识符应始终以“ set”开头,其后是首个大写字母的属性标识符:

public void setHappy(boolean happy){}

public void setName(String name){}

3)布尔属性的访问器/获取器方法的标识符应始终以'is''get'开头,其后是首字母大写的属性标识符:

public boolean isHappy(){}

public boolean getHappy(){}

否则,如果属性不是布尔值,则访问器/获取器方法的标识符应始终以“ get”开头,其后是首字母大写的属性标识符:

public String getName(){}

4)需要注意的一个细微差别是,我们是否拥有布尔包装器属性而不是原始的布尔属性:

private Boolean happy;

然后,getter方法的标识符始终以“ get”开头,后跟属性标识符,首字母大写,并且从不为“ is”,因为我们返回的是对象而不是原始值:< / p>

public Boolean isHappy(){}

5)以上规则仅适用于属性及其相关的getter和setter方法标识符,不适用于方法的任何局部变量,包括方法参数。