相关疑难解决方法(0)

如何从java.lang.Class对象获取源文件名/行号

在给定java.lang.Class对象的情况下,是否可以获取源文件名和声明类的行号?

数据应该在.class文件的调试信息中提供.我知道的唯一的地方,JDK返回这样的调试信息,java.lang.StackTraceElement但我不确定是否可以强制Java java.lang.StackTraceElement为任意类创建实例,因为我们没有在类中执行方法.

我的确切用例是一个匿名内部类,它具有编译器生成的名称.我想知道类声明的文件名和行号.

我不想使用字节码操作框架,但如果必须的话我可以回到它.

java reflection debug-symbols

16
推荐指数
1
解决办法
1万
查看次数

获取声明的方法,使它们出现在源代码中

情况似乎是异常的,但我被要求构建序列化器,它将通过连接"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添加某种自定义注释.

java reflection

10
推荐指数
1
解决办法
5962
查看次数

如何使用反射获得多签名调用方法?

假设我们有:

@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服务.

java reflection

5
推荐指数
1
解决办法
423
查看次数

是否可以从.class文件中获取注释的行号?

我试图从.class文件中获取注释的行号,但我只能得到注释列表,而不是行.是否有可能做到这一点?

java

5
推荐指数
1
解决办法
180
查看次数

标签 统计

java ×4

reflection ×3

debug-symbols ×1