All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.lang.caller.CallerUtil Maven / Gradle / Ivy

Go to download

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

There is a newer version: 5.8.34
Show newest version
package cn.hutool.core.lang.caller;

/**
 * 调用者。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用
 *
 * @author Looly
 * @since 4.1.6
 */
public class CallerUtil {
	private static final Caller INSTANCE;
	static {
		INSTANCE = tryCreateCaller();
	}

	/**
	 * 获得调用者
	 *
	 * @return 调用者
	 */
	public static Class getCaller() {
		return INSTANCE.getCaller();
	}

	/**
	 * 获得调用者的调用者
	 *
	 * @return 调用者的调用者
	 */
	public static Class getCallerCaller() {
		return INSTANCE.getCallerCaller();
	}

	/**
	 * 获得调用者,指定第几级调用者
* 调用者层级关系: * *
	 * 0 CallerUtil
	 * 1 调用CallerUtil中方法的类
	 * 2 调用者的调用者
	 * ...
	 * 
* * @param depth 层级。0表示CallerUtil本身,1表示调用CallerUtil的类,2表示调用者的调用者,依次类推 * @return 第几级调用者 */ public static Class getCaller(int depth) { return INSTANCE.getCaller(depth); } /** * 是否被指定类调用 * * @param clazz 调用者类 * @return 是否被调用 */ public static boolean isCalledBy(Class clazz) { return INSTANCE.isCalledBy(clazz); } /** * 获取调用此方法的方法名 * * @param isFullName 是否返回全名,全名包括方法所在类的全路径名 * @return 调用此方法的方法名 * @since 5.2.4 */ public static String getCallerMethodName(boolean isFullName){ final StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2]; final String methodName = stackTraceElement.getMethodName(); if(false == isFullName){ return methodName; } return stackTraceElement.getClassName() + "." + methodName; } /** * 尝试创建{@link Caller}实现 * * @return {@link Caller}实现 */ private static Caller tryCreateCaller() { Caller caller; try { caller = new SecurityManagerCaller(); if(null != caller.getCaller() && null != caller.getCallerCaller()) { return caller; } } catch (Throwable e) { //ignore } caller = new StackTraceCaller(); return caller; } // ---------------------------------------------------------------------------------------------- static interface and class }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy