这是对How to get the line number of a method?
的跟进我有一个java.lang.reflect.Field
实例,想知道声明类在声明的哪一行。
目前我有CtField
,但缺少getLineNumber()
方法。
public static int getLineNumberOf(Field field) {
ClassPool cp = ClassPool.getDefault();
CtClass ctClass = cp.getCtClass(field.getDeclaringClass().getName());
CtField ctField = ctClass.getDeclaredField(field.getName());
ctField.getLineNumber();
// ^^^^^^^^^^^^^^ that one is missing.
}
获取行号的正确方法是什么?
编辑:在调查该主题后,似乎字段的行号未存储在类文件中。但在某些情况下,如下所述:java.objectweb.asm Line Number of Methods and Attributes
对于在适当位置初始化的字段,锚点就是该行 在方法体中的FIELDPUT指令之前的数字,与 在它之前指向外面的行号输入 方法行号范围(即第一行号之外) 方法中的条目和visitEnd()之前的最后一个条目。有一个 如果构造函数是最后一个方法并且放置了字段 在方法的最后。如果字段初始化,它也不会工作 已在构造函数体中声明。