有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我的结构如下:

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只接受自身拥有的Inner实例

我知道所有非静态的内部类都通过它们的类体内的Outer.this引用(所有)外部类

我想知道是否有比向Inner添加任何方法更好的方法来检查这个问题,比如isOwnedBy(Outer outer) { return outer == Outer.this; }getOwner() { return Outer.this }


共 (2) 个答案

  1. # 1 楼答案

    I want to create a fool-proof ....

    这总是比你想象的要难

    manager.operateOn(state);

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

    试试吧

    state.operate();
    

    state知道它应该使用哪个manager。这样就无法指定错误的管理器,因为您无法更改管理器

  2. # 2 楼答案

    正如彼得所说

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

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