如何在 Eclipse 中找到一个匿名的内部类,只给出它的合成名称 (Class$N)?

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

Search->Java功能没有帮助。

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

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

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


答案 1

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


您可以调用 ,然后调用 Class.getEnclosingMethodClass.getEnclosingConstructorClass.getEnclosingClass 之一,以查找其立即封闭的定义。如果多个匿名类位于同一封闭成员中,则这可能是模棱两可的,但它为您提供了开始查找的位置。Class.forName("SomeClass$5")


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


答案 2

推荐