在给定java.lang.Class对象的情况下,是否可以获取源文件名和声明类的行号?
数据应该在.class文件的调试信息中提供.我知道的唯一的地方,JDK返回这样的调试信息,java.lang.StackTraceElement但我不确定是否可以强制Java java.lang.StackTraceElement为任意类创建实例,因为我们没有在类中执行方法.
我的确切用例是一个匿名内部类,它具有编译器生成的名称.我想知道类声明的文件名和行号.
我不想使用字节码操作框架,但如果必须的话我可以回到它.
情况似乎是异常的,但我被要求构建序列化器,它将通过连接"get"方法的结果将对象解析为字符串.值应与源代码文件中声明的"get"等效值的顺序相同.
所以,例如,我们有
Class testBean1{
public String getValue1(){
return "value1";
}
public String getValue2(){
return "value2";
}
}
Run Code Online (Sandbox Code Playgroud)
结果应该是:
"value1 - value2"
Run Code Online (Sandbox Code Playgroud)
不是
"value2 - value1"
Run Code Online (Sandbox Code Playgroud)
Class根据文档,它不能用对象完成.但是我想知道我是否可以在"*.class"文件中找到这些信息还是丢失了?如果存在这样的数据,也许有人知道为此目的准备使用的工具?如果无法找到此类信息,请提出最专业的实现目标的方法.我想为应该序列化的类的getter添加某种自定义注释.
假设我们有:
@WebserviceUrl("/withObj")
public void caller(Object obj){
called();
}
@WebserviceUrl("/withoutObj")
public void caller(){
called();
}
Run Code Online (Sandbox Code Playgroud)
如你所见,来电者有两个签名.为了获得堆栈跟踪,我们可以使用:
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
Run Code Online (Sandbox Code Playgroud)
但它只返回方法的名称.我怎样才能找到真正的真实来电者?
更新:问题
的主要目的是阅读在方法的注释中声明的webservice url.错误检测调用方法,导致调用错误的Web服务.