为什么 getClass 返回类的名称 + $1(或 $*)
我正在编写一段代码,如果它是某个类的实例,则必须在其中强制转换对象。
像往常一样,我使用 instanceof
来检查兼容性。
问题是检查永远不会满足,因为对象属于“奇怪”的类。
例如;当我在此对象上调用方法 getClass().getSimpleName()
时,它会返回类的名称 + $*
(例如 ViewPart$1
> 而不是 ViewPart
)。
这个$*
是什么意思? 有解决方案或解决方法吗?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这显示了一个内部类(匿名(如果有数字)或命名)。例如:
类
Foo.Bar
的名称是Foo$Bar
。现在,如果我们有:这将打印
Foo$1
。您可以在 javac 创建的类文件的命名中看到相同的效果。
That shows an inner class (either anonymous (if it has a number) or named). For example:
The name of class
Foo.Bar
isFoo$Bar
. Now if we had:That will print
Foo$1
.You can see the same effect in the naming of the class files created by javac.
这些是匿名类的实例。
ViewPart$1
是在ViewPart
内定义的第一个匿名类 - 但这并不意味着它是ViewPart
的子类。它很可能是某些 Listener 接口的匿名实现。These are instances of an anonymous class.
ViewPart$1
is the first anonymous class defined insideViewPart
- but that doesn't mean it's a subclass ofViewPart
. It's most likely an anoymous implementation of some Listener interface.$ 表示内部类。例如,考虑两个类
如果编译此代码,您将获得两个类文件 TopClass.class 和 TopClass$SubClass.class。
检查您的 ViewPart 类是否有任何内部类。
希望有帮助。
$ denotes for inner class. For example consider two classes
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.