[英]Java Accessing outer class variables from an inner class singleton
我有一個由兩個類實現的接口( Node
): White
,我想成為一個單例; Black
,而不是一個單例。 問題是我希望這些類被一個外部類( Outer
)包圍,該類具有自己的字段( outerObject
)。 White
應該是單例,這意味着它應該是靜態的。 但是Black
需要能夠訪問外部類字段,這意味着它不能是靜態的。
在這里,如果White
不是靜態的,那么它實際上不是單例的:
class Outer {
interface Node {
Node foo();
}
// I would like the White class to be a singleton class
class White implements Node {
Node foo() {
return new Black();
}
}
class Black implements Node {
Node foo() {
outerObject.doSomething();
return this;
}
}
Object outerObject;
}
但是,如果我將White
設為靜態單例,那么在沒有封閉的Outer
情況下無法實例化新的Black
:
enum White implements Node {
INSTANCE;
Node foo() {
return new Black(); // This doesn't work because Black
// needs an enclosing outer class.
}
}
而且,如果我將Black
設為靜態類,則它無法訪問外部類中的字段( outerObject
):
static class Black implements Node {
Node foo() {
outerObject.doSomething(); // can't access non-static field
return this;
}
}
捕獲相同問題的更簡單表示形式就是嘗試從單例White
訪問outerObject
:
class Outer {
enum White {
INSTANCE;
Node foo() {
outerObject.doSomething();
return this;
}
}
Object outerObject;
}
我必須使White
非靜態的,以便能夠訪問outerObject
,但是為了成為單例,它應該是靜態的。
有誰知道是否有解決方案? 如果涉及到這一點,我可以嘗試創建一個偽單內部類(在某種意義上,外部類的每個實例只能具有該內部類的一個實例)。 或者只是放棄單例模式並手動聲明一個White
。
您可以指定要創建新Black的外部實例。 但這可能不是您想要的。
enum White implements Node {
INSTANCE;
public Node foo() {
return new Outer().new Black(); // This will work
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.