我们目前正在对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)
答案 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方法标识符,不适用于方法的任何局部变量,包括方法参数。