从StackTraceElement获取不带包名的类名

4

我有这个ste.getClassName(),它返回一个像这样的Stringpack.age.Foo

steStackTraceElement

我怎样才能只得到Foo?或者唯一的方法是编写一个从该字符串中提取Foo的方法?


是的,根据API文档的说明,这是唯一的方法。 - Ondřej Xicht Světlík
1
Class.forName(ste.getClassName()).getSimpleName() 怎么样? - ernest_k
getSimpleName()怎么样? - PM 77-1
创建类实例的问题在于,该类可能当前不可用或无法访问。 - Ondřej Xicht Světlík
1
@KunLun 这可以是一个私有的内部类,模块私有(不从模块导出)或由不同的ClassLoader加载。可能还有更多,这只是我能想到的。 - Ondřej Xicht Světlík
显示剩余2条评论
3个回答

5

这方面没有内置的方法。你可以像 @Naya 和 @Daniel Perez 建议的那样分割字符串,或者让 Class 来为你完成繁重的工作:

String simpleName = Class.forName(ste.getClassName()).getSimpleName();

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

这就是我想到的方法,但我不太喜欢(我也不知道为什么:P),我还以为有一个预定义的方法可以做到。但还是谢谢! - KunLun

1
String[] parts = ste.getClassName.split(".");

parts[2]将成为Foo值。 .split允许您选择一个值,根据分隔符的位置将字符串分割成数组。


1
这就是我想到的方法,但我不太喜欢(我也不知道为什么:P),我还以为有一个预定义的方法可以做到。但还是谢谢! - KunLun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接