我有一个字符串
String A;
以及处理它的一些方法
public void setA(String A) throws AInvalidException{
if(isAValid())
this.A = A;
throw new AInvalidException();
}
public boolean isAValid(){
int aLength = getA().length();
return b = (aLength==9) ? true: false;
}
public String getA(){
return A;
}
当我尝试在主
中查看我的字符串的长度时AClass.setA("123456789");
它说我的String无效,调试后我看到我的String长度为零。我可能做错了什么?
答案 0 :(得分:5)
验证时,您正在从验证后设置的地方开始阅读
将其更改为
if(isAValid(A))
和
public boolean isAValid(String str){
if(str == null) return false; //it could be null as well
int aLength = str.length();
return b = (aLength==9) ? true: false;
}
注意:您应遵循命名惯例
答案 1 :(得分:1)
当然String无效。
当您创建Foo
的新实例时,A
为null
。当您致电setA
时,setA
会致电isAValid
,但该方法会使用A
的当前值:null
。
您需要参数化isValid
:
public class Foo {
private String A;
private boolean b;//??
public boolean isAValid (String a) {
int aLength = a.length();
return b = (aLength==9) ? true: false;//why do you set b?
//proposal: change to
return (alength == 9);//and don't set b
}
public void setA(String A) throws AInvalidException{
if(isAValid(A)) {
this.A = A;
} else {//add else, otherwise you will always throw an exception
throw new AInvalidException();
}
}
//...
}
此外,您还需要添加else
语句,否则您的setA
方法始终会抛出异常。
最后,为什么你使用return b = ...
并不是crear,我认为b
是某个领域。首先,大多数程序员都同意这样的语法非常混乱,接下来你通过执行检查来改变对象的状态,你最好在改变方法(setter)和检查方法(getter等)中分割方法......
为什么使用(condition) ? true : false
也很不清楚。由于条件已经返回true
或false
,您可以简单地说明:return condition
,或者在您的情况下return b = condition
。