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

Mav*_*rik 8 java instanceof

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

像往常一样,我用它instanceof来检查兼容性.

问题是从不满足检查,因为对象属于"奇怪"类.

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

$*意味着什么?有解决方案或解决方法吗?

Jon*_*eet 15

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

class Foo {
    static class Bar {
    }
}
Run Code Online (Sandbox Code Playgroud)

班级的名字Foo.BarFoo$Bar.现在,如果我们有:

class Foo {

    static void bar() {
        Runnable r = new Runnable() {
            public void run() {};
        };

        System.out.println(r.getClass());
    }
}
Run Code Online (Sandbox Code Playgroud)

那将打印出来Foo$1.

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