Условие задачи:
При запуске программа заканчивается исключением. Но из текста исключения в консоли неясно, где оно возникло. В этой задаче тебе нужно:
обернуть в try-catch код методов addIce, addVodka, addJuice и addOrange;
в блоках catch вызвать метод printBugMethodName и передать в него stack trace.
Если сделаешь все правильно, при запуске программы на экран выведутся имена методов, в которых возникает исключение.
Требования:
• Нужно обернуть в try-catch код методов addIce, addVodka, addJuice и addOrange.
• В методах addIce, addVodka, addJuice и addOrange в блоках catch нужно разместить одну команду - вызов метода printBugMethodName.
• При каждом вызове метода printBugMethodName в него нужно передать текущий stack trace.
Сокращенный код задачи (без полного решения и только с одним методом - addIce):
public class Solution {
public static void main(String[] args) {
Map<String, Integer> screwdriverIngredients = makeScrewdriver();
String screwdriver = screwdriverIngredients.keySet().stream()
.map(key -> key + "=" + screwdriverIngredients.get(key))
.collect(Collectors.joining(", ", "{", "}"));
System.out.println(screwdriver);
}
static Map<String, Integer> makeScrewdriver() {
Map<String, Integer> ingredients = new TreeMap<>();
addIce(ingredients);
addVodka(ingredients);
addJuice(ingredients);
addOrange(ingredients);
return ingredients;
}
static void addIce(Map<String, Integer> ingredients) {
try {
ingredients.put("ice cubes", 7); // обернула код метода в try
} catch (Exception e) {
printBugMethodName(!!!); // здесь нужно передать текущий stack trace
}
}
public static void printBugMethodName(StackTraceElement[] stackTraceElements) {
StackTraceElement stackTraceElement = stackTraceElements[1];
System.out.println(stackTraceElement.getMethodName());
}
}
Вопрос:
В строке 24, если я передаю, e.getStackTrace, то валидатор не принимает решения. Если передаю Thread.currentThread().getStackTrace(), то решение проходит.
Как я понимаю, Thread.currentThread().getStackTrace() - текущий стек трейс, а e.getStackTrace - то же самое, но специально для исключений. Почему тогда e.getStackTrace не подходит?
P.S. Видела аналогичные вопросы, но из-за отсутсвия условия и кода задачи, там не было полного ответа, поэтому расписала подробно