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

时间:2011-08-24 08:31:26

标签: java instanceof

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

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

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

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

$*是什么意思? 有解决方案或解决方法吗?

3 个答案:

答案 0 :(得分:15)

显示内部类(匿名(如果有数字)或命名)。例如:

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创建的类文件的命名中看到相同的效果。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

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

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

检查您的ViewPart类是否有任何内部类。 希望它有所帮助。