2016-07-28 90 views
0

代碼A很好,我認爲代碼B可以正常工作,但事實上,代碼B無法正常工作。爲什麼?爲什麼我不能在Java中的函數中創建對象?

爲什麼我無法在功能private void SetField(Context mContext,MAtt aField,String name)中創建對象?

代碼A

public class MURLPar { 

    public MAtt diskcount=new MAtt(); 
    public MAtt diskindex=new MAtt(); 


    public MURLPar(Context mContext){ 
     SetField(mContext,diskcount,"Pardiskcount"); 
     SetField(mContext,diskindex,"Pardiskindex"); 
    } 


    public class MAtt { 
     public String name; 
     public String value; 
    } 


    private void SetField(Context mContext,MAtt aField,String name){ 
     int id = mContext.getResources().getIdentifier(name, "string", mContext.getPackageName()); 
     aField.name=mContext.getString(id); 
    } 
} 

代碼B

public class MURLPar { 

    public MAtt diskcount; 
    public MAtt diskindex; 


    public MURLPar(Context mContext){ 
     SetField(mContext,diskcount,"Pardiskcount"); 
     SetField(mContext,diskindex,"Pardiskindex"); 
    } 


    public class MAtt { 
     public String name; 
     public String value; 
    } 


    private void SetField(Context mContext,MAtt aField,String name){ 
     aField=new MAtt(); //Create object 
     int id = mContext.getResources().getIdentifier(name, "string", mContext.getPackageName()); 
     aField.name=mContext.getString(id); 
    } 
} 
+0

什麼是'亞光'的接口


如果你想要的東西,像一個out參數,你可以通過返回一個新創建的對象模擬出? –

+0

錯誤是什麼意思? – Shaishav

+0

該問題沒有明確定義:「代碼B無法正常工作」。但這不是編譯錯誤。這可能是一個業務邏輯錯誤。 – NangSaigon

回答

2

發生了什麼事在代碼B是,MURLPar構造函數傳遞給SetField,這是法中的名稱爲aFielddiskcount/diskindex參考。

然後您重新分配aField並引用新創建的對象,然後操作該對象。請注意,aField現在指的是一個完全獨立的對象,而不是當您輸入SetField時提及的內容。

如果你熟悉C,你能想到的,你在這裏做的東西沿着這些路線的內容:

void SetField(MAtt *aField) { 
    aField = (MAtt*) calloc(1, sizeof(MAtt)); 
} 

MAtt *diskcount; 
SetField(diskcount); 

然後期待diskcount調用SetField之後已經改變,這顯然是將不會有。

private MAtt SetField(Context mContext, String name){ 
    MAtt aField = new MAtt(); //Create object 
    int id = mContext.getResources().getIdentifier(name, "string", mContext.getPackageName()); 
    aField.name=mContext.getString(id); 
    return aField; 
} 

然後:

diskcount = SetField(mContext, "Pardiskcount"); 
相關問題