package com.javarush.task.task09.task0906;
/*
Логирование стек-трейса
*/
public class Solution {
public static void main(String[] args) {
log("In main method");
}
public static void log(String s) {
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName() + ": " + Thread.currentThread().getStackTrace()[2].getMethodName()+ ": " + s);
}
}
Максим Алексеенко
16 уровень
Все работает но не пропускает
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
23 марта 2020, 13:39
А если я вызову метод log в другом классе?
0
Максим Алексеенко
23 марта 2020, 13:43
это же другая ситуация, мы решаем исходя из того что имеем
0
Ksenia Volkova Java Developer в DXC Master
23 марта 2020, 13:47
Мы решаем исходя из условий задачи.
Что сказано в требованиях? Имя какого класса нужно вывести?
0
Максим Алексеенко
23 марта 2020, 13:52
Имя класса в котором вызывается метод log(), и имя ему "Solution" - разве не так?
0
Ksenia Volkova Java Developer в DXC Master
23 марта 2020, 14:00
Из чего это следует? Из того, что в конкретном примере из задачи это так?
Ну вот я написала свой пример, вызвала метод log из другого класса - а твой код выводит совсем не то => требование задачи не выполняется.
0
hidden #598481
23 марта 2020, 14:07
Методы в принципе не вызываются в классах, методы могут относиться к классам, а вызываются методы только в других методах или в блоках кода.
То, что метод log написан в классе Solution (и соответственно) относится к этому классу, к задаче отношения не имеет. Тебе нужно посмотреть, откуда был вызван метод log и вывести того класса, в котором произошел вызов. Если вызов произошел в методе main класса Solution, то мы по методу определяем название класса Solution.main -> Solution. Если вызов произошел в другом классе, как в примере Ксении, то мы должны опять определять название по методу, осуществившему вызов: AnotherSolution.main -> AnotherSolution. Короче, оба метода должны вызываться от одного и того же элемента стек-трейса.
0
Максим Алексеенко
23 марта 2020, 14:20
А что пытаюсь сделать я ?
0
hidden #598481
23 марта 2020, 14:25
А ты название метода берешь правильно, а название класса берешь по методу log, а не по методу, из которого он был вызван.
0
Максим Алексеенко
23 марта 2020, 14:36
я знаю, что там должен быть индекс 2, но не понимаю разницы между "название класса берешь по методу log" и "по методу, из которого он был вызван" для меня это одно и тоже, не знаю как эту разницу прочувствовать
0
hidden #598481
23 марта 2020, 14:41решение
Для тебя это одно и то же, потому что ты работаешь только внутри класса Solution.
Ксения тебе показала на примере, что твой метод log можно вызвать из другого класса. Что конкретно сделали: создали другой класс, создали в нем метод main, вызвали из него твой метод log.
В требованиях задачи по этому поводу написано следующее:
Выведенное сообщение должно содержать имя класса, метод которого вызвал метод log.
В этом примере метод log был вызван из метода main класса AnotherSolution. Это значит, что в соответствие с требованиями задачи, твоя программа должна была вывести следующее:
+2