为什么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$1
是ViewPart
定义的第一个匿名类 – 但这并不意味着它是ViewPart
的子类。 它很可能是一些Listener接口的糟糕实现。
$表示内部类。 例如,考虑两个类
public class TopClass { class SubClass { // some methods }// inner class end } // outer class end
如果编译此代码,您将获得两个类文件TopClass.class和TopClass $ SubClass.class。
检查您的ViewPart类是否有任何内部类。 希望能帮助到你。