如何获得内部类';s外部类';这是用Java写的吗?

如何获得内部类';s外部类';这是用Java写的吗?,java,inner-classes,Java,Inner Classes,我有两个类,外部和内部,以及外部中的一个方法,该方法采用内部。它需要验证此内部是它自己的,而不是属于另一个实例的内部。我想做的基本上是innerInstance.outer.this,但似乎没有关键字。我唯一的另一个想法是在内部上使用getOuterThis()方法,但我不想求助于此 以下是我试图完成的总体框架: public class Outer { public Inner getInner() { ... } public void useInner(Inner in

我有两个类,
外部
内部
,以及
外部
中的一个方法,该方法采用
内部
。它需要验证此
内部
是它自己的,而不是属于另一个实例的
内部
。我想做的基本上是
innerInstance.outer.this
,但似乎没有关键字。我唯一的另一个想法是在
内部
上使用
getOuterThis()
方法,但我不想求助于此

以下是我试图完成的总体框架:

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;
        }
    }
}

我不认为有什么好的方法可以获取
外部引用。除非像你现在这样显式地公开它。但是,您可以通过让内部类进行验证来完全避免这种情况:

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");
            }
        }
    }
}

您需要一个实例来调用validate方法。仅供参考…@拉萨德-是的,你说得对。看起来David Ehrmann为我修复了它。@EJP Eclipse编译器不喜欢它。这是一个与您链接的副本不同的问题。这就是如何在不向内部类添加方法的情况下从外部类执行此操作。很明显,答案就在外面。