簡體   English   中英

為什么java下屬對象不能訪問父字段?

[英]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

    }
}

其實,如果你申報mParentEtMain而不是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實現來獲取需要保持同步的對象的引用。 動作方法將檢查哪個更新並同步另一個。

http://developer.android.com/guide/topics/ui/ui-events.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM