我是靠谱客的博主 激情大山,最近开发中收集的这篇文章主要介绍java reflect method_获取调用方方法(java.lang.reflect.Method),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

小编典典

如果仅用于测试,则可能有效。它假定可以通过调用类的类访问类文件ClassLoader,并且类文件已使用调试符号进行编译(我希望它们用于测试!)。此代码依赖于ASM字节码库。

public static Method getMethod(final StackTraceElement stackTraceElement) throws Exception {

final String stackTraceClassName = stackTraceElement.getClassName();

final String stackTraceMethodName = stackTraceElement.getMethodName();

final int stackTraceLineNumber = stackTraceElement.getLineNumber();

Class> stackTraceClass = Class.forName(stackTraceClassName);

// I am only using AtomicReference as a container to dump a String into, feel free to ignore it for now

final AtomicReference methodDescriptorReference = new AtomicReference();

String classFileResourceName = "/" + stackTraceClassName.replaceAll("\.", "/") + ".class";

InputStream classFileStream = stackTraceClass.getResourceAsStream(classFileResourceName);

if (classFileStream == null) {

throw new RuntimeException("Could not acquire the class file containing for the calling class");

}

try {

ClassReader classReader = new ClassReader(classFileStream);

classReader.accept(

new EmptyVisitor() {

@Override

public MethodVisitor visitMethod(int access, final String name, final String desc, String signature, String[] exceptions) {

if (!name.equals(stackTraceMethodName)) {

return null;

}

return new EmptyVisitor() {

@Override

public void visitLineNumber(int line, Label start) {

if (line == stackTraceLineNumber) {

methodDescriptorReference.set(desc);

}

}

};

}

},

0

);

} finally {

classFileStream.close();

}

String methodDescriptor = methodDescriptorReference.get();

if (methodDescriptor == null) {

throw new RuntimeException("Could not find line " + stackTraceLineNumber);

}

for (Method method : stackTraceClass.getMethods()) {

if (stackTraceMethodName.equals(method.getName()) && methodDescriptor.equals(Type.getMethodDescriptor(method))) {

return method;

}

}

throw new RuntimeException("Could not find the calling method");

}

2020-10-09

最后

以上就是激情大山为你收集整理的java reflect method_获取调用方方法(java.lang.reflect.Method)的全部内容,希望文章能够帮你解决java reflect method_获取调用方方法(java.lang.reflect.Method)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部