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

标签 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(/* ... */) {
        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(Outerouter) { returnouter == Outer.this; }getOwner() { return Outer.this }

最佳答案

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

这总是比你想象的更难。

manager.operateOn(state);

如果您知道它必须提供给与状态相关的经理,我就不会提供该经理。

尝试一下

state.operate();

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

关于java - Java中如何检查内部类的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780517/

相关文章:

java - Android key 对生成

java - 如何创建一个名为“标识符”的新数据类型,使其每个实例都应该是有效的标识符名称?

c++ - 类中枚举类的运算符重载

python-3.x - 具有相同输入的两个 python(3) 类(扩展一个 python 类)

jQuery 禁用类上的复选框

java - 如何在具有私有(private)构造函数的本地内部类的类外部创建实例?

java - 制作一个 "TransactionAction"内部类

java - 有没有一种简单的方法可以将我的 XML 对象转换回 Java 中的 String?

JAVA——代表月份和年份

javascript - 以 javascript 形式记录 Bson 查询