Conventionally, can a set() method return a value in Java?
我正在学习如何用Java编写整洁有序的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class Car { private boolean mHasAxles; private boolean mHasTires; private Tires mTires; public setAxels(boolean hasAxles) { mHasAxels = hasAxles; } public boolean hasAxles() { return mHasAxles; } public boolean setTires(Tires tires) { if(hasAxles()){ mTires = tires; mHasTires = true; return true; // Returns true if it was able to set tires } return false; // Returns false because car did not have axels // Therefore, tires could not be set } } |
在这个例子中,我的问题是关于
传统上严格 - 不,设定者通常会返回空白。
话虽如此,如果你愿意,你可以自由地返回
为了更清楚,您可能希望使用不同的方法名称,例如
1 2 3 4 5 6 7 | public void setTires(Tires tires){ if(!hasAxels()) { throw new IllegalStateException("no axels!"); } mTires = tires; mHasTires = true; } |
顺便提一下,
最后,您可以避免使用java中的
1 2 3 | public setAxels(boolean hasAxels){ this.hasAxels = hasAxels; } |
为什么?当您使用Java,C ++,任何语言编写代码时,您希望代码的任何读者(可能是人类)可以访问方法所做的大部分知识,只需读取他的名字。
为了完成这个断言,我们可以研究
如果
如果
您"可以"返回一个值,但按照惯例,setter不返回值。由于setter通常以一种甚至不引用返回值的方式使用,因此类的任何调用者都很容易忽略您返回的值。什么都没有阻止被叫做:
myCar.setTires(aTire);
...并忽略你甚至返回一个布尔值,因为这是调用和使用setter的正常方式。如果调用者可以忽略它并且代码看起来正确,则这会使您返回值的目的失败。
我的第一个倾向是抛出java.lang.IllegalArgumentException而不是返回false。