gpt4 book ai didi

java - 我怎样才能在 Eclipse 中找到一个仅给出其合成名称 (Class$N) 的匿名内部类?

转载 作者:太空狗 更新时间:2023-10-29 22:58:23 26 4
gpt4 key购买 nike

如果我在使用 Eclipse 时只得到了类的名称 Class$N 而没有遍历代码并计算每个匿名类,我如何找到一个匿名内部类?是否有“跳转到匿名类声明”功能,我可以在其中输入 $ 后缀编号?

搜索->Java 功能没有帮助。

我正在使用 VisualVM 查找 CPU 热点。我的热点位于名为 SomeClass$5 的匿名类中。 VisualVM 找不到我的类的源代码,我(和其他人)也找不到如何将源代码附加到 VisualVM,如 here 所示。和 here .启动器插件无法解决此问题。

计数匿名声明不是一种选择,因为从长远来看,人为错误排序数百行的风险可能会导致大量时间浪费在错误的匿名类上,只是为了找出它是错误的类。

作为解决方法,我正在使用 'System.out.println("this="+this.getClass().getName());' 测试类,以确保它是正确的方法,但必须有更好的方法。

最佳答案

我不知道如何在 Eclipse 中执行此操作,但我可以提供另外两种查找声明的方法。


您可以调用 Class.forName("SomeClass$5"),然后调用 Class.getEnclosingMethod 之一或 Class.getEnclosingConstructorClass.getEnclosingClass找到它的直接封闭定义。如果多个匿名类在同一个封闭成员中,这可能是不明确的,但它为您提供了一个开始查找的地方。


您可以使用带有 javap -v SomeClass$5.class 的 javap 工具反汇编已编译的类文件。如果类文件是使用调试信息编译的,并且匿名类至少包含一个方法定义,则这些方法定义的 LineNumberTable 属性将指示它们在源文件中的定义位置。 SourceFile 属性将包含源文件名。 EnclosingMethod 属性将命名封闭方法(如果有的话),InnerClasses 属性将包含有关封闭类和内部类的信息(包括仅是 使用过,所以在解释时要小心)。

关于java - 我怎样才能在 Eclipse 中找到一个仅给出其合成名称 (Class$N) 的匿名内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29890537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com