【问题标题】:How to get the name of a class without the package?如何在没有包的情况下获取类的名称?
【发布时间】:2011-02-11 00:45:06
【问题描述】:

在 C# 中,Type.FullName 和 Type.Name 用于获取带有或不带有命名空间(java-world 中的包)的类型(在本例中为类)的名称。

Type.Name 对应的 java 是什么?

显然,必须有比使用Class.getName() 更好的方法并手动将其从包名中删除。

【问题讨论】:

标签: java


【解决方案1】:

Class.getSimpleName()

返回源代码中给出的基础类的简单名称。如果底层类是匿名的,则返回一个空字符串。

数组的简单名称是附加“[]”的组件类型的简单名称。特别是组件类型为匿名的数组的简单名称是“[]”。

它实际上是从名称中剥离包信息,但这对你是隐藏的。

【讨论】:

  • 它还将匿名类的内部名称映射到空字符串,并使用数组类名称进行处理。
  • 我不知道它可以返回一个空字符串,恕我直言,这是一个设计缺陷。如果没有简单的名字,它应该抛出一个异常。
  • 对于内部类,它不仅会剥离包,还会剥离外部类的名称。 (我想要其他行为,所以这个答案对我来说是错误的。)
  • @toolforger this.getClass.getEnclosingClass.getSimpleName + "$" + this.getClass.getSimpleName 会为您工作吗?
  • @AlonsodelArte 不确定(有多个嵌套级别和匿名类等复杂情况)。反正不太相关,我只是想指出,对于所写的问题,答案在技术上是不正确的。
【解决方案2】:

如果使用 StackTraceElement,请使用:

String fullClassName = stackTraceElement.getClassName();
String simpleClassName = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);

System.out.println(simpleClassName);

【讨论】:

  • 问题是关于你有类对象的情况,而不是堆栈跟踪。
猜你喜欢
  • 2014-01-02
  • 2011-05-16
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
相关资源
最近更新 更多