问题
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 $*
means?
Is there a solution or a workaround?
回答1:
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.
回答2:
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.
回答3:
$ 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.
来源:https://stackoverflow.com/questions/7172581/why-getclass-returns-the-name-of-the-class-1-or