Java:Try-Catch-Continue?

2022-09-02 19:47:12

假设我可以一组语句:

try {
  String a = getProperty("a");
  String b = getProperty("b");
  String c = getProperty("c");
} catch(Exception e) {

}

现在,假设找不到属性 b,并且该函数引发异常。在这种情况下,我如何继续或将b设置为null而不必为每个属性编写一个 try-catch 块?我的意思是,a,b,c存在,但有时可能根本找不到它们,在此期间会引发异常。


答案 1

假设您无法更改函数,以便在找不到属性时返回 null,那么您有点卡在自己的 try catch 块中包装所有内容 - 特别是如果您希望检索到每个可以检索的值(而不是让第一个失败的值取消整个操作)。

如果您有很多这些属性要检索,也许编写一个要使用的帮助器方法会更干净:

String getPropertySafely(String key) {
   try {
      return getProperty(key);
   } catch (Exception e) {
      return null;
   }
}

答案 2

你必须在每个语句周围做一个尝试。没有继续(就像VB中的块一样)。而不是:ON ERROR ... RESUME

String a = null;
try {
  a = getProperty("a");
} catch(Exception e) {
  ...
}
String b = null;
try {
  b = getProperty("b");
} catch(Exception e) {
  ...
}
String c = null;
try {
  c = getProperty("c");
} catch(Exception e) {
  ...
}

你可以写:

public String getPropertyNoException(String name) {
  try {
    return getProperty(name);
  } catch (Exception e) {
    return null;
  }
}

就个人而言,我认为a是一个糟糕的候选者,只是为了所有这些额外的样板文件而抛出异常getProperty()


推荐