forked from eugenedobro/JavaStepIC
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStackTrace.java
More file actions
37 lines (30 loc) · 1.44 KB
/
Copy pathStackTrace.java
File metadata and controls
37 lines (30 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
Реализуйте метод, позволяющий другим методам узнать, откуда их вызвали.
Метод getCallerClassAndMethodName() должен возвращать имя класса и метода, откуда вызван метод, вызвавший данный утилитный метод. Или null (нулевую ссылку, а не строку "null"), если метод, вызвавший getCallerClassAndMethodName() является точкой входа в программу, т.е. его никто не вызывал.
Пример
package org.stepic.java.example;
public class Test {
public static void main(String[] args) {
System.out.println(getCallerClassAndMethodName());
anotherMethod();
}
private static void anotherMethod() {
System.out.println(getCallerClassAndMethodName());
}
public static String getCallerClassAndMethodName() {
// ...
}
}
При запуске эта программа должна вывести:
null
org.stepic.java.example.Test#main
P.S. При тестировании этой программы в среде разработки вы можете получить другой результат: вместо null в первой строчке будет напечатан какой-то посторонний класс и метод. Это связано с тем, что среда разработки обычно запускает не ваш класс, а свой собственный, который затем уже вызывает ваш. Чтобы этого избежать, запускайте программу командой "java" в командной строке.
*/
public static String getCallerClassAndMethodName() {
StackTraceElement[] ste = new Exception().getStackTrace();
if (ste.length < 3 ) {
return null;
} else {
return ste[2].getClassName()+"#"+ste[2].getMethodName();
}
}