2013-11-24 35 views
0

我想修改一個類內的對象,但這些更改持續到調用此類並傳遞該對象的類。這裏有一些代碼使其更加清晰。修改一個Java參數傳遞給一個類

我有一個叫AddCourseForm類,這裏是它的構造函數:

public AddCourseForm(CourseData c) { 
     addOrEdit = 0; //default add mode 
     initComponents(); 
     courseList = c; 
    } 

其中courseList是private CourseData courseList;

我希望能夠做的是使用courseList我AddCourseForm類(添加,刪除的東西),但有這些變化持續到傳遞給構造函數CourseData c,但我不知道該怎麼做。我知道如果我直接將CourseData c直接傳遞給某個方法,但我不知道如何使這些更改持續存在,但不知道如何以這種方式執行。

+0

Yoy想要參數會改變出功能嗎? – MeNa

+2

由於您在任何時候更改courseList時都會保存對c(courseList)的引用,因此c也將被更改。他們指向同一個對象。這是你想要的嗎? – rabz100

+0

你想堅持的課程數據是什麼? –

回答

1

您只需要將CourseData對象中的值設置爲AddCourseForm類。

請看下面的例子:

public class RefTest { 

    private static class Ref { 
     /* Don't do this in real life, public fields are bad practice. 
     * just done here for sake of example. 
     * make a getter and setter at the very least. 
     */ 
     public int someInt; 
    } 

    private static class RefMod { 
     private Ref r; 
     public RefMod(Ref r) { 
      this.r = r; 
     } 

     public void setRefInt(int newInt) { 
      r.someInt = newInt; 
     } 
    } 

    public static void main(String[] args) { 
     Ref ref = new Ref(); 
     ref.someInt = 11; 

     System.out.println(ref.someInt); 

     RefMod refMod = new RefMod(ref); 
     refMod.setRefInt(42); 

     System.out.println(ref.someInt); 

     final Ref fRef = new Ref(); 
     fRef.someInt = 300; 

     System.out.println(fRef.someInt); 

     refMod = new RefMod(fRef); 
     refMod.setRefInt(500); 

     System.out.println(fRef.someInt); 
    } 
} 

輸出將是:

11 
42 
300 
500 

您在構造函數中傳遞的CourseData僅僅是一個對象的引用。來電者的引用不會改變。包含在引用的CourseData對象中的數據字段能夠在假設它們可變且可見的情況下進行更改。

你會注意到,即使我的例子中的第二個ReffRef被聲明爲final,它的someInt字段仍然可以被修改。

+0

如果我正確地理解你,那將意味着我已經做得正確。如果我在foo()中有public void foo(ArrayList list)並調用list.add(),那麼一旦方法返回,我知道列表將會有這些更改。我在做什麼基本上是一回事?因此,如果我在類中的任何位置調用courseList.add(),構造函數中的c也會得到這些更改? –

+1

@BhargavB是的,你已經做得正確。請注意,如果您將「AddCourseForm#courseList」更改爲引用其他內容或將外部引用更改爲其他內容,則會引用不同的對象,並且不會反映更改。 「共享」這樣的對象只在兩個引用仍然引用同一個對象時才起作用。 (應該是顯而易見的,但有些人一開始就會遇到這個問題。) – Radiodef

+0

哦,是的,絕對。我對這裏的概念非常滿意,我只是不確定這將如何適用於通過構造函數引用跨類更改對象。感謝所有的幫助:) –