如果在使用Eclipse时只给出了类Class$N
的名称,而不通过代码并计算每个匿名类,我如何找到一个匿名内部类?是否有跳转到匿名类声明'功能,我可以输入$后缀号码?
Search-> Java功能没有帮助。
我正在使用VisualVM查找CPU热点。我的热点是一个名为SomeClass $ 5的匿名类。 VisualVM无法找到我的类的源代码,而我(以及其他人)无法找到如何将源附加到VisualVM,显示为here和here。启动程序插件无法解决此问题。
计算匿名声明不是一种选择,因为从长远来看,人为错误排序数百行的风险可能导致浪费大量时间试图处理错误的匿名类只是为了找出它是错了。
作为一种解决方法,我在方法中使用'System.out.println("this="+this.getClass().getName());'
测试类以确保它是正确的,但必须有更好的方法。
答案 0 :(得分:3)
我不知道如何在Eclipse中执行此操作,但我可以提供另外两种方法来查找声明。
您可以拨打Class.forName("SomeClass$5")
,然后拨打Class.getEnclosingMethod或Class.getEnclosingConstructor或Class.getEnclosingClass之一,查找其随附的定义。如果多个匿名类在同一个封闭成员中,这可能是不明确的,但它会让你在某个地方开始寻找。
您可以使用带有javap -v SomeClass$5.class
的javap工具反汇编已编译的类文件。如果使用调试信息编译类文件,并且匿名类包含至少一个方法定义,那么这些方法定义的LineNumberTable
属性将指示它们在源文件中的定义位置。 SourceFile
属性将包含源文件名。 EnclosingMethod
属性将命名封闭方法(如果有),并且InnerClasses
属性将包含有关封闭和内部类的信息(包括仅仅使用的无关类 ,在解释时要小心。)