如何在Java中获得内部类的外部类?

时间:2014-07-27 01:07:23

标签: java inner-classes

我有两个类OuterInner,以及Outer中的一个方法Inner。它需要验证此Inner是否属于其中一个,而不是属于另一个实例的Inner。我想要做的主要是innerInstance.outer.this,但似乎没有关键字。我唯一的另一个想法是在getOuterThis()上采用Inner方法,但我宁愿不必诉诸于此。

以下是我要完成的一般框架:

public class Outer {

    public Inner getInner() { ... }

    public void useInner(Inner inner) {
        // Validate here
    }

    public class Inner {
        // Can I avoid this?
        public Outer getOuterThis() {
            return Outer.this;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我不认为获得Outer.this引用是一种好方法,除非明确地公开它,就像你正在做的那样。但是,您可以通过让内部类进行验证来完全避免这种情况:

public class Outer {

    public Inner getInner() { ... }

    public void useInner(Inner inner) {
        // Validate
        inner.validateOuterInstance(this);
    }

    public class Inner {
        public void validateOuterInstance(Outer outer) {
            if (Outer.this != outer) {
                throw new InvalidArgumentException("Wrong outer instance");
            }
        }
    }
}