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

对OCA方法JavaBeans命名约定的误解,java,naming-conventions,javabeans,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;}

我们目前正在对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指定):CE

我们讨论的是C点:

public intgetNumWings(){returnnumberWings;}

我的同事的观点是,由于下面提到的规则,这是错误的。方法访问器必须是getNumberWings,因此C点是错误的。我附上了亚奥理事会的规则表,它认为规则5是错误的

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


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

我还试图找到一个合适的答案:

来自oracle的JavaBeans约定:

JavaBeans约定(简而言之是Java)

你的同事(我认为)认为

public int getNumWings() { return numberWings;}
违反JavaBean,因为字段名和属性名不同

该规范不支持这种情况。Java beans约定(已编码)规定:

6.2.2. 性质 bean定义了类型为
T
的属性
p
,如果它有 遵循这些模式(如果
T
是boolean,一种特殊形式的getter 方法(不允许):

吸气剂 布尔吸气剂 塞特 例外情况 属性访问器方法可以引发任何类型的已检查或未检查异常


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

关于OCA,JavaBean规则是:

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

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

private

私有字符串名称

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

public void setHappy(布尔happy){}

public void集合名(字符串名){}

3) 布尔属性的访问器/获取器方法标识符应始终以“is”或“get”开头,后跟属性标识符,其第一个字母大写:

public boolean isHappy(){}

public boolean getHappy(){}

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

公共字符串getName(){}

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

private

然后getter方法的标识符总是以“get”开头,然后是属性的标识符,其第一个字母大写,并且从不以“is”开头,因为我们返回的是对象而不是原语值:

public Boolean isHappy(){}


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

如果
numberWings
是私有的,那么它的名称实际上并不重要。我还添加了rolesThanks表,我自己也遇到了同样的问题,也有同样的问题。很高兴知道我不是唯一一个被弄糊涂的人。(A)是应该是
isCanSwim()
。在OCA课程中有一个命名约定规则表,我认为规则5不正确实际上,它很好。再一次,您混淆了属性和字段。阅读他们实际使用的单词。谢谢你的帮助!!
    public T getP()
    public boolean isP()
    public void setP(T)