我有一个类,想要获取它的名称以进行显示。
Class<?> cls = obj.getClass();
假设obj
是KeyDownEvent.Listener
(KeyEvent
中的嵌套接口)的实例。
- 如果我使用
cls.getSimpleName()
,我会得到Listener
- 可以很容易地有更多带有该名称的名称。 - 如果我使用
cls.getName()
,我会得到带有包的全名 - 准确,但在日志中阅读不是很容易。
知道如何从cls
获得"KeyDownEvent.Listener"
吗?
请注意,我想在日志中使用结果。
虽然KeyDownEvent.Listener
并不准确,因为在不同的包中可以有多个具有这种名称的类,但我会冒险。它比带有包的全名更好。
所以我
找到了一个解决方案,可以帮助其他人。
诀窍是class.getEnclosingClass()
:
Class<?> cls = obj.getClass();
Class<?> enclosing = cls.getEnclosingClass();
return
(enclosing == null ? "" : enclosing.getSimpleName() + ".")
+ cls.getSimpleName();