Могу ли я когда-нибудь поймать исключение java.lang.Exception вместо его подклассов?
Рассмотрим этот сенарио:
public class Tree {
public static Tree newInstance() throws NoWaterException, NoSoilException, NoSunshineException {
...
return new Tree();
}
}
Когда я хочу получить экземпляр Tree, я могу сделать это:
public Tree plantTree() throws TreePlantExcetpion {
try {
...
return Tree.newInstance();
} catch (NoWaterException e) {
throw new TreePlantExcetpion("Cannot plant a tree since no water", e);
} catch (NoSoilException e) {
throw new TreePlantExcetpion("Cannot plant a tree since no soil", e);
} catch (NoSunshineException e) {
throw new TreePlantExcetpion("Cannot plant a tree since no sunshine", e);
}
}
Но я также могу сделать это альтернативно:
public Tree plantTree() throws TreePlantExcetpion {
try {
...
return Tree.newInstance();
} catch (Exception e) {
throw new TreePlantExcetpion("Cannot plant a tree", e);
}
}
Я предпочитаю вторую реализацию метода plantTree
(), поскольку он короче и понятнее, и в этом методе меня не интересуют конкретные подклассы Exception
, что мне нужно сделать, это обернуть в новый TreePlantExcetpion
и передать его. Вся подробная информация не будет потеряна. И я уверен, что метод Tree.newInstance () не будет генерировать никаких других типов исключений (по крайней мере, пока). Могу ли я сделать это таким образом?
Примечание : NoWaterException
, NoSoilException
, NoSunshineException
не могут быть подклассами TreePlantExcetpion
. Они не находятся в одной иерархии наследования.
Суть в том, что если обработка исключений одинакова для всех перехваченных исключений, могу ли я просто перехватить их суперкласс, т.е. java.lang.Exception
вместо этого?