1
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
4

2 回答 2

4

以下字符串操作应该可以完成这项工作: xxx.class.getCanonicalName().substring(x.class.getCanonicalName().length + 1)

+1.在最后一个外部类名和感兴趣的类名之间的(点)。

于 2013-05-08T15:06:17.347 回答
2

您可以使用此功能。这+1是额外的.

public static String getRelativeClassName(Class<?> inner, Class<?> outer) {
  int length = outer.getCanonicalName().length();
  return inner.getCanonicalName().substring(length+1);
}
于 2013-05-08T15:06:26.270 回答