java 查看引用_如何获取Java中的调用方类

堆栈跟踪

这高度取决于您要查找的内容...但是,这应该直接在此对象中获得调用此方法的类和方法。

索引0 =线程

索引1 =这个

索引2 =直接呼叫者,可以是自己。

索引3 ... n =相互调用以获得索引2及以下的类和方法。

对于类/方法/文件名:

Thread.currentThread().getStackTrace()[2].getClassName();

Thread.currentThread().getStackTrace()[2].getMethodName();

Thread.currentThread().getStackTrace()[2].getFileName();

上课:

Class.forName(Thread.currentThread().getStackTrace()[2].getClassName())

仅供参考:Class.forName()抛出不是运行时的ClassNotFoundException。您需要尝试抓住。

同样,如果您希望忽略类本身内的调用,则必须添加一些带有逻辑的循环来检查该特定事物。

像...(我没有测试过这段代码,所以要当心)

StackTraceElement[] stes = Thread.currentThread().getStackTrace();

for(int i=2;i

if(!stes[i].getClassName().equals(this.getClass().getName()))

return stes[i].getClassName();

StackWalker

StackWalker StackFrame

请注意,这不是详尽的指南,而是这种可能性的一个示例。

打印每个StackFrame的Class(通过获取Class引用)

StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE)

.forEach(frame -> System.out.println(frame.getDeclaringClass()));

做同样的事情,但首先将流收集到一个列表中。仅用于演示目的。

StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE)

.walk(stream -> stream.collect(Collectors.toList()))

.forEach(frame -> System.out.println(frame.getDeclaringClass()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值