2015-10-24 6 views
1

В 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 

На самом деле я хочу теперь, как класс и метод называют свой след() (Родитель)

ответ

0

Вы создаете исключение и печатаете его stacktrace.

Exception e = new Exception(); 
e.printStackTrace(); 
//or 
StackTraceElement[] stack = e.getStackTrace(); 
StackTraceElement last = stack[0]; 

EDIT: В комментариях Fabian предоставил лучшее решение, вам не нужно, чтобы создать исключение:

Thread.currentThread().getStackTrace() 
+1

Нет необходимости, чтобы создать исключение для получения трассировки стека, см: HTTP: //stackoverflow.com/a/1069074/2991525 – fabian

+0

Вы правы, Фабиан, спасибо, обновил ответ. –

+0

Я обновил свой пост, я хочу иметь такой метод, как trace(), мне не нравится вызов getStackTrace() в каждом блоке кода – user3166171