Why getClass returns the name of the class + $1 (or $*)
I'm writing a piece of code in which I have to cast an Object if it is an instance of a certain class.
As usual I'm using instanceof
for checking the compatibility.
The problem is that the check is never satisfied because the objects belong to "strange" classes.
For example; when I call the method getClass().getSimpleName()
on this object it return me the name of the class + $*
(e.g. ViewPart$1
instead of ViewPart
).
What does this 开发者_StackOverflow$*
means?
Is there a solution or a workaround?
That shows an inner class (either anonymous (if it has a number) or named). For example:
class Foo {
static class Bar {
}
}
The name of class Foo.Bar
is Foo$Bar
. Now if we had:
class Foo {
static void bar() {
Runnable r = new Runnable() {
public void run() {};
};
System.out.println(r.getClass());
}
}
That will print Foo$1
.
You can see the same effect in the naming of the class files created by javac.
These are instances of an anonymous class. ViewPart$1
is the first anonymous class defined inside ViewPart
- but that doesn't mean it's a subclass of ViewPart
. It's most likely an anoymous implementation of some Listener interface.
$ denotes for inner class. For example consider two classes
public class TopClass {
class SubClass {
// some methods
}// inner class end
} // outer class end
If you compile this code you will get two class files TopClass.class and TopClass$SubClass.class.
Check your ViewPart class whether it has any inner classes. Hope it helps.
精彩评论