【发布时间】:2014-07-16 12:13:19
【问题描述】:
我有以下结构:
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 })更好的检查方法。
【问题讨论】:
-
可能是
void create(...) { this.inner = new Inner(); }和void operateOn() { this.inner.doSomething(); }? -
"意思是 Outer.operateOn 只接受自己拥有的 Inner 实例" 如何传递任何其他 Inner 类型?
-
@assylias 您可以使用 create 创建多个实例,这不是 1:1 的关系
-
@JamesB 我想防止这种情况发生:
Outer manager2 = new Outer(); Inner state2 = manager2.create(...); manager.operateOn(state2);接受的答案就是这样做的。
标签: java class inner-classes