无论如何在 finally 语句中获得 return 值?

Is there anyway to get return value in finally statement?

在一些遗留代码中,return 值有多个位置。我想记录 return 值。是否可以在finally语句中得到return值?

例如:

try {
   if (v == 1) { 
      return 3;
   } else if (v == 3) {
      return x + 2;
   }
} finally {
   // I need to know the return value here, either 3 or x + 2. 
}

否; finally 块没有前一个 return 值的上下文。

最好的办法是将值存储在变量中,记录变量,然后 return 变量。

int result = 0;
if (v == 1) {
  result = 3;
  log.debug(result);
  return result;
} else if (v == 3) {
  result = x + 2;
  log.debug(result);
  return result;
}

调用 return 后,将跳过该函数中的所有其他内容。如果您想知道那里的价值是什么,最好将 3x+2 保存在 try 块范围之外的变量中。

int ret = -1;
try {
    if (v == 1) {
        ret = 3;
    }
    else if (v == 3) {
        ret = x + 2;
    }
}
finally {
    System.out.println("The value of ret is " + ret);
}
return ret;