[英]Why can't java subordinate object access parent field?
我有一個我實例化兩次的對象,每個對象都需要影響另一個對象中的某些東西。 是的,它很難看,但在Android中,我想在一個顯示/標簽中設置一個單選按鈕,與另一個顯示/標簽中的狀態相匹配。 我想我可以在父級中有一個方法來更新單選按鈕的兩個實例,這可能是一種更好的方法。 但我不明白為什么我在下面所做的事情不起作用,我想理解為什么即使我不使用它。
我將在本例中使用'someField'作為交叉訪問字段。 我將'this'傳遞給父對象的每個實例化對象,然后我應該能夠通過我想到的父對象訪問另一個'兄弟'對象中的字段,但它似乎不起作用。 這是代碼的簡化版本(實際上這兩個類當然是在兩個文件中):
public class EtMain extends TabActivity {
public WxFields mDepWx;
public WxFields mArrWx;
public void onCreate(Bundle savedInstanceState) {
mDepWx = new WxFields(this);
mArrWx = new WxFields(this);
}
}
public class WxFields {
private Activity mParent; // Main Window object
public int someField;
public WxFields(Activity myParent) {
mParent = myParent;
}
public void someSetup() {
Button mButton = (Button) mParent.findViewById(R.id.someRes); //<---mParent works here
mParent.mArrWx.someField = 0; //<------------ mArrWx cannot be resolved
//I don't seem to be able to access a field in the parent object
//Yes, it's not symmetrical, but the code is just for illustration purposes
}
}
其實,如果你申報mParent
為EtMain
而不是Activity
,它會工作(雖然這將是丑陋的...)
Activity
沒有這樣的字段( mArrWx
)
public class EtMain extends TabActivity {
public WxFields mDepWx;
public WxFields mArrWx;
public void onCreate(Bundle savedInstanceState) {
mDepWx = new WxFields(this);
mArrWx = new WxFields(this);
}
}
public class WxFields {
private EtMain mParent; // Main Window object
public int someField;
public WxFields(EtMain myParent) {
mParent = myParent;
}
public void someSetup() {
Button mButton = (Button) mParent.findViewById(R.id.someRes); //<---mParent works here
mParent.mArrWx.someField = 0;
}
}
看起來您必須將mParent
為鍵入EtMain
才能使該字段可見。
mArrWx
不是Activity
類型的成員。
我猜想你會使用一個Listener實現來獲取需要保持同步的對象的引用。 動作方法將檢查哪個更新並同步另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.