你可以生成堆栈跟踪并使用StackTraceElements中的信息。
例如,实用程序类可以为你返回调用类名称:
public class KDebug { public static String getCallerClassName() { StackTraceElement[] stElements = Thread.currentThread().getStackTrace(); for (int i=1; i<stElements.length; i++) { StackTraceElement ste = stElements[i]; if (!ste.getClassName().equals(KDebug.class.getName()) && ste.getClassName().indexOf("java.lang.Thread")!=0) { return ste.getClassName(); } } return null; }}如果你调用
KDebug.getCallerClassName()从
bar(),你会得
到"foo"。
现在假设你想知道方法调用的类
bar(这会更有趣,也许你真正想要的是)。你可以使用以下方法:
public static String getCallerCallerClassName() { StackTraceElement[] stElements = Thread.currentThread().getStackTrace(); String callerClassName = null; for (int i=1; i<stElements.length; i++) { StackTraceElement ste = stElements[i]; if (!ste.getClassName().equals(KDebug.class.getName())&& ste.getClassName().indexOf("java.lang.Thread")!=0) { if (callerClassName==null) { callerClassName = ste.getClassName(); } else if (!callerClassName.equals(ste.getClassName())) { return ste.getClassName(); } } } return null; }这是用于调试吗?如果没有,可能有一个更好的解决方案。



