我正在编写一段代码,如果它是某个类的实例,我必须构建一个Object。
像往常一样,我正在使用instanceof
来检查兼容性。
问题是从不满足检查,因为对象属于“奇怪”类。
例如;当我在此对象上调用方法getClass().getSimpleName()
时,它会返回类+ $*
的名称(例如ViewPart$1
而不是ViewPart
)。
这$*
是什么意思?
有解决方案或解决方法吗?
答案 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$1
是ViewPart
中定义的第一个匿名类 - 但这并不意味着它是ViewPart
的子类。它很可能是一些Listener接口的糟糕实现。
答案 2 :(得分:1)
$表示内部类。例如,考虑两个类
public class TopClass {
class SubClass {
// some methods
}// inner class end
} // outer class end
如果编译此代码,您将获得两个类文件TopClass.class和TopClass $ SubClass.class。
检查您的ViewPart类是否有任何内部类。 希望它有所帮助。