How to really get the name of a class without the package?
我的问题是有意命名几乎完全像这一个,但我想要的是剥离包的名称,而不是其他任何东西。我的课看起来像
1 2 3 4 5 6 7 8 9 10 11 | class AProperlyAndDescriptivelyNamedClass { class First {...} class Next {...} class Last {...} } class AnotherTopLevelLongNamedClass { class First {...} class Next {...} class Last {...} } |
如您所见,我正在为顶级类使用一些长的描述性类名,重复嵌套类中的所有内容将是非常荒谬的。使用一些奇怪的捷径也不会更好。我总是使用它们的封闭类(没有包)来引用类,这也是我想要打印它们的方式。
我知道我可以得到包名并从完整的类名中去掉相应数量的字符,但我想已经有人做了吗?
我想您需要实现这样一个简短的方法:
1 2 3 4 5 6 7 8 |
然后
1 2 |
意志输出
1 | AnotherTopLevelLongNamedClass.First |
看看这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static String findName (Object o){ List<String> list = new ArrayList<String>(); Class<? extends Object> clazz = o.getClass(); list.add(clazz.getSimpleName()); while (clazz.getEnclosingClass() != null) { clazz = clazz.getEnclosingClass(); list.add(clazz.getSimpleName()); } StringBuilder builder = new StringBuilder(); for (int i=list.size()-1; i>=0; i--){ builder.append(list.get(i)); builder.append("."); } builder.delete(builder.length()-1, builder.length()); return builder.toString(); } |