java – 如何获取一个方法的行号?
发布时间:2020-12-14 16:37:56 所属栏目:Java 来源:网络整理
导读:是否可以得到使用反射或其他魔法的方法的行号? 如果该方法在当前的Stacktrace内,这是可能的.使用Thread.currentThread().getStackTrace(),可以得到一个 StackTraceElement 的行号.但是如果我只有 java.lang.reflect.Method 对象,该怎么办? 我发现这个,对于
是否可以得到使用反射或其他魔法的方法的行号?
如果该方法在当前的Stacktrace内,这是可能的.使用Thread.currentThread().getStackTrace(),可以得到一个 StackTraceElement 的行号.但是如果我只有
java.lang.reflect.Method 对象,该怎么办?
我发现这个,对于类 – > How to get source file-name/line-number from a java.lang.Class object但它对于方法没有用处. 解决方法
我想做同样的事情,经过一些研究,就解决了javassist.您将需要添加javassist(我使用版本3.15.0-GA).
给定以下类确定“x”方法的位置.方法名称“x”是硬编码的,但是如果你和我在一样的船上,反射并不困难,所以我相信你可以得到一个方法名称列表,然后下面将让你得到行号的方法: public class Widget { void x(){System.out.println("I'm xn");} //comment added to create space void y(){System.out.println("I'm yn");} } import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.NotFoundException; public class App { public static void main(String[] args) throws NotFoundException { System.out.println("Get method line number with javassistn"); ClassPool pool = ClassPool.getDefault(); CtClass cc = pool.get("com.quaternion.demo.Widget"); CtMethod methodX = cc.getDeclaredMethod("x"); int xlineNumber = methodX.getMethodInfo().getLineNumber(0); System.out.println("method x is on line " + xlineNumber + "n"); } } 输出:方法x在第12行,在我的情况下是准确的我删除了一些评论… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |