package u.v;
class x {
static class xx {
static class xxx { }
}
}
虽然我可以得到内部类的规范("绝对")名称
public class a{
public static void main(String[] args) {
System.out.println(x.xx.xxx.class.getCanonicalName()); //u.v.x.xx.xxx
}
}
,我还可以得到类名的最后一个组件
public static void main(String[] args) {
System.out.println(x.xx.xxx.class.getSimpleName()); //xxx
}
如何优雅地获取相对类名?
Utils.relativeClassName(x.xx.xxx.class, x.class); //xx.xxx
应该使用下面的字符串操作:xxx.class.getCanonicalName().substring(x.class.getCanonicalName().length + 1)
+1
表示最后一个外部类名与感兴趣类名之间的.
(点)。
可以使用这个函数。+1
表示额外的.
public static String getRelativeClassName(Class<?> inner, Class<?> outer) {
int length = outer.getCanonicalName().length();
return inner.getCanonicalName().substring(length+1);
}