获取Java内部类的外部类实例的类名

3
abstract class Base {
...
  public class Inner {
    private final String ownerClassName;
    public Inner() {
    ...
    }
  }
  public static class Super1 extends Base{
  ...
  }
  public static class Super2 extends Base{
  ...
  }
}

我希望Inner.Inner()能将ownerClassName设置为封闭类实例的类型,例如"Super1"或"Super2"。

如何实现呢?

2个回答

9
Base.this.getClass().getName()

在我的测试中,这并不是完全有效的。我得到了完全限定的类名,即我得到了“package.Base$Super2”而不是“Super2”。它应该使用getSimpleName()吗? - Mr. Boy
@John:很可能。这些类也是嵌套的吗? - SLaks
实际上,在我的特定情况下是这样的。我已经相应地更新了代码,尽管我认为这并没有什么区别。 - Mr. Boy
@John:这会对你得到的名称产生影响。 - SLaks

2

首先将ownerClassName中的final关键字去掉,并将其设置为private,如果需要,只提供get方法。

然后按照以下代码操作:

Inner() {
   ownerClassName = Base.this.getClass().getSimpleName();
}

1
为什么它不应该是final,它应该在构造函数中设置并且永远不会改变? - Mr. Boy

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