В C# мы имеем информацию о вызывающем абонентеИнформация о вызывающем абоненте в Java
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
System.Diagnostics.Trace.WriteLine("message: " + message);
System.Diagnostics.Trace.WriteLine("member name: " + memberName);
System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
MSDN Ссылка: CallerInfo
Я хочу знать, Java имеет эквивалентные аннотации или нет?
эти функции могут помочь нам для лучшего отслеживания
UPDATE:
Я написал класс:
public class Trace {
public static void trace() {
StackTraceElement[] stk = Thread.currentThread().getStackTrace();
System.out.println(String.format("LineNumber : %s, ClassName : %s, MethodName : %s, SourceLocation : %s",
stk[1].getLineNumber(), stk[1].getClassName(), stk[1].getMethodName(), stk[1].getFileName())
);
}
}
и позвони след() метод:
public class Main {
public static void main(String[] args) throws Exception {
Trace.trace();
}
}
и РЕЗУЛЬТАТ:
LineNumber : 8, ClassName : Trace, MethodName : trace, SourceLocation : Trace.java
это не так для меня, я хочу, результат, как этот:
LineNumber : 3, ClassName : Main, MethodName : main, SourceLocation : Main.java
На самом деле я хочу теперь, как класс и метод называют свой след() (Родитель)
Нет необходимости, чтобы создать исключение для получения трассировки стека, см: HTTP: //stackoverflow.com/a/1069074/2991525 – fabian
Вы правы, Фабиан, спасибо, обновил ответ. –
Я обновил свой пост, я хочу иметь такой метод, как trace(), мне не нравится вызов getStackTrace() в каждом блоке кода – user3166171