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

use*_*655 15 java eclipse anonymous-inner-class visualvm

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

Search-> Java功能没有帮助.

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

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

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

Jef*_*oom 4

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


您可以调用,然后调用Class.getEnlookingMethodClass.getEnlookingConstructorClass.getEnlookingClassClass.forName("SomeClass$5")之一来查找其直接封闭定义。如果多个匿名类位于同一个封闭成员中,这可能会不明确,但它为您提供了开始查找的地方。


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