问题在于我的代码内部发生了一些奇怪的事情;
让我们来看我的例子(我稍微清理了一下):
我发现我的代码中存在逻辑错误后使用了强大的调试器,结果发现了一件有趣的事情。
假设 redirect_url 字符串包含 "statement4" 子字符串,那么第四个 elseif 语句(不包括内部 elseif 语句)将被执行并返回 AUTH_SUCCESS。我是这样想的。
但问题在于,当触发 return AUTH_FAILED 时,下一个指令是在第二个 else if 语句中调用 foo() 函数。我不知道为什么会发生这种情况。太奇怪了。有什么想法吗?
更新1: 类内定义的常量: 示例
最后,让我们见识一下病人:
public int foo() throws IOException {
if(redirect_url.indexOf("statement_1") != -1){
if(check() == true){
//do something
}else{
//do something
foo(); //yep, recursive call
}
}else if(redirect_url.indexOf("statement_2") != -1) {
map.clear();
bar();
map.put("val", 1);
map.put("val2", "2");
foo(); //yep, recursive call; Remember this line!!
}else if(redirect_url.indexOf("statement3") != -1) {
return AUTH_SUCCESS;
}else if(redirect_url.indexOf("statement4") != -1){
return AUTH_SUCCESS;
}else {
return AUTH_FAILED;
}
}catch (Exception e){
return AUTH_FAILED;
}
return AUTH_FAILED;
}
有一个小函数被另一个函数调用,我们称之为
public void buzz(){
try {
switch (signInAttempt()){
case AUTH_SUCCESS:
//do smth
return true;
case AUTH_FAILED:
//do smth
return false;
case ACCESS_REQUEST:
//do smth
default:
return false;
}
} catch (IOException e) {
e.printStackTrace();
}
}
我发现我的代码中存在逻辑错误后使用了强大的调试器,结果发现了一件有趣的事情。
假设 redirect_url 字符串包含 "statement4" 子字符串,那么第四个 elseif 语句(不包括内部 elseif 语句)将被执行并返回 AUTH_SUCCESS。我是这样想的。
但问题在于,当触发 return AUTH_FAILED 时,下一个指令是在第二个 else if 语句中调用 foo() 函数。我不知道为什么会发生这种情况。太奇怪了。有什么想法吗?
更新1: 类内定义的常量: 示例
private static final int AUTH_SUCCESS = 4;
更新2 更多代码:
遇到调用函数
public boolean rollIn(){
try {
switch (signInAttempt()){
case AUTH_SUCCESS:
//do smth
case AUTH_FAILED:
return false;
case ACCESS_REQUEST:
return true;
default:
return false;
}
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
最后,让我们见识一下病人:
public int signInAttempt() throws IOException {
try {
/*connection*/
this.doc = connection.parse();
System.out.println(redirect_url);
if(redirect_url.indexOf("authorize") != -1){
if(findCaptcha() == true){
signInAttempt();
}else{
authData.clear();
signInAttempt();
}
}else if(redirect_url.indexOf("authcheck") != -1) {
authData.clear();
authData.put("v1", 1);
authData.put("v2", 2);
System.out.println(action_url);
signInAttempt();
}else if(redirect_url.indexOf("__q_hash") != -1) {
System.out.println("AUTH SUCCESS");
return AUTH_SUCCESS;
}else if(redirect_url.indexOf("access_token") != -1){
return AUTH_SUCCESS;
}else {
return AUTH_FAILED;
}
}catch (Exception e){
return AUTH_FAILED;
}
return AUTH_FAILED;
}
类似这样的
return foo();
吗? - Jaroslaw Pawlakboolean
值? - xenteros