为什么我的 getter 和带有常量的 setter 不能与 string.length() 一起使用?
Why will my getter and setter with a constant not work with string.length()?
有谁能解释为什么当我在 if 语句中为 String.length() 使用常量时,它不会通过有效测试,但如果我在 if 语句中对值进行硬编码,它会通过?
public void setName(String name) {
if (name.length() >= 1 && name.length() <= 20) {
this.name = name;
} else {
throw new IllegalArgumentException();
}
}
所以上面的方法可行,但我认为创建两个具有相同值 1 和 20 的常量 UPPER_NAME_LIMIT 和 LOWER_NAME_LIMIT 会更好。
* @param name the name to set
*/
public void setName(String name) {
if (name.length() >= LOWER_NAME_LIMIT && name.length() <= UPPER_NAME_LIMIT) {
this.name = name;
} else {
throw new IllegalArgumentException();
}
}
常量编码如下
public static final int UPPER_NAME_LIMIT = 1;
public static final int LOWER_NAME_LIMIT = 20;
public static final int UPPER_NAME_LIMIT = 1;
public static final int LOWER_NAME_LIMIT = 20;
改为
public static final int UPPER_NAME_LIMIT = 20;
public static final int LOWER_NAME_LIMIT = 1;
有谁能解释为什么当我在 if 语句中为 String.length() 使用常量时,它不会通过有效测试,但如果我在 if 语句中对值进行硬编码,它会通过?
public void setName(String name) {
if (name.length() >= 1 && name.length() <= 20) {
this.name = name;
} else {
throw new IllegalArgumentException();
}
}
所以上面的方法可行,但我认为创建两个具有相同值 1 和 20 的常量 UPPER_NAME_LIMIT 和 LOWER_NAME_LIMIT 会更好。
* @param name the name to set
*/
public void setName(String name) {
if (name.length() >= LOWER_NAME_LIMIT && name.length() <= UPPER_NAME_LIMIT) {
this.name = name;
} else {
throw new IllegalArgumentException();
}
}
常量编码如下
public static final int UPPER_NAME_LIMIT = 1;
public static final int LOWER_NAME_LIMIT = 20;
public static final int UPPER_NAME_LIMIT = 1;
public static final int LOWER_NAME_LIMIT = 20;
改为
public static final int UPPER_NAME_LIMIT = 20;
public static final int LOWER_NAME_LIMIT = 1;