如何在Java中检查内部类的所有权

如何在Java中检查内部类的所有权,java,class,inner-classes,Java,Class,Inner Classes,我的结构如下: public class Outer { public /*non-static*/ final class Inner { // to prevent instantiating other than in method `create` private Inner(/* ... */) { /* ... */ } /* ... */ } Inner create(/* ... */) {

我的结构如下:

public class Outer {
    public /*non-static*/ final class Inner {
        // to prevent instantiating other than in method `create`
        private Inner(/* ... */) { /* ... */ }
        /* ... */
    }

    Inner create(/* ... */) {
        return new Inner(/* ... */);
    }

    void operateOn(Inner inner) {
        // TODO check if inner for this Outer instance
    }
}
用法如下:

Outer manager = new Outer();
Inner state = manager.create(/* ... */);
还有别的地方

manager.operateOn(state);
我想创建一个防傻瓜的实用程序类,意思是
Outer.operateOn
只接受自己拥有的
internal
实例

我知道所有非静态的内部类都通过
outer引用(所有)外部类。这在它们的类体内

我想知道是否有比向
内部添加任何方法更好的方法,比如
isOwnedBy(Outer-Outer){return-Outer==Outer.this;}
getOwner(){return-Outer.this}

我想创造一个傻瓜证明

这总是比你想象的要难

运营经理(州)

如果你知道它必须交给与州有关的经理,我不会提供经理

试试看

state.operate();
状态
知道应该使用哪个
管理器
。这样就无法指定不正确的管理器,因为您无法更改管理器。

正如Peter所说

class Inner{
     private Inner(Outer manager){
        this.manager = manager;
     }

     public void operate(){
          manager.operate(this);
     }

}    

管理器中的
operate
方法应该是私有的。

可能是
void create(…){this.inner=new inner();}
void operateOn(){this.inner.doSomething();}
?“这意味着Outer.operateOn只接受自己拥有的内部实例”如何传递任何其他内部类型?@assylas您可以使用create创建多个实例,它不是1:1relation@JamesB我想防止这种情况:
outermanager2=newouter();内部状态2=manager2.create(…);运营经理(州2)被接受的答案正是如此。嗯,我会接受这个,但是我可能在把我当前的设计翻译成一个问题时犯了一个错误。我可能会发布另一个与此类似的帖子。@Keerthivasan+1谢谢,我将把它作为一般性声明;)关键是我有一个内部类,并且管理器引用是由编译器自动生成的。彼得建议的
operate
看起来像
Outer.this.operate(this)
以防我的代码。注意:
Outer。这是可选的。
编译器将根据参数和上下文解析正确的
operate
方法。Outer需要有不同的名称,否则
operate(这)将无法编译。