是否可以得到使用反射或其他魔法的方法的行号?
如果该方法在当前的Stacktrace内,这是可能的.使用Thread.currentThread().getStackTrace(),可以得到一个
我发现这个,对于类 – > How to get source file-name/line-number from a java.lang.Class object但它对于方法没有用处.
如果该方法在当前的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 x\n");} //comment added to create space void y(){System.out.println("I'm y\n");} }
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 javassist\n"); 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"); } }