为什么getClass返回类的名称+ $ 1(或$ *)

我正在编写一段代码,如果它是某个类的实例,我必须转换它。

像往常一样,我使用instanceof来检查兼容性。

问题是从不满足检查,因为对象属于“奇怪”类。

例如; 当我在这个对象上调用方法getClass().getSimpleName() ,它返回类+ + $*的名称(例如ViewPart$1而不是ViewPart )。

这个$*是什么意思? 有解决方案还是解决方法?

这显示了一个内部类 (匿名(如果它有一个数字)或命名)。 例如:

 class Foo { static class Bar { } } 

Foo.Bar的名称是Foo$Bar 。 现在,如果我们有:

 class Foo { static void bar() { Runnable r = new Runnable() { public void run() {}; }; System.out.println(r.getClass()); } } 

这将打印Foo$1

您可以在javac创建的类文件的命名中看到相同的效果。

这些是匿名类的实例。 ViewPart$1ViewPart定义的第一个匿名类 – 但这并不意味着它是ViewPart的子类。 它很可能是一些Listener接口的糟糕实现。

$表示内部类。 例如,考虑两个类

 public class TopClass { class SubClass { // some methods }// inner class end } // outer class end 

如果编译此代码,您将获得两个类文件TopClass.class和TopClass $ SubClass.class。

检查您的ViewPart类是否有任何内部类。 希望能帮助到你。