2012-02-25 101 views
3

是否可以將實例變量作爲參數傳遞給同一個類中的方法?在同一類中的方法中傳遞實例變量作爲參數?

請參見下面的代碼:

public class Example 
{ 

    private int var1; //instance variable to be changed 


    public Example() 
    { 
     var1 = 0; 
    } 

    public void changeVar() 
    { 
     this.changeVar1(var1); //call method to change from within class 
    } 

    private void changeVariable(int variable) //changes passed instance variable 
    { 
     variable = 2; 
    } 

} 

本例中使用,它似乎愚蠢的,因爲你可以很容易地通過第一個方法調用,changeVar()改變VAR1,但我有一個更復雜的程序在那裏我有多個實例變量(var1,var2,var3,var4 ... var10)。我試圖編寫changeVariable()一次,並根據需要更改的內容傳遞每個實例變量,而不是爲需要更改的每個實例變量(即changeVariable1,changeVariable2 ... changeVariable10)編寫單獨的方法。

回答

1

這不只是愚蠢 - 它不會工作。 Java中的參數是總是按值傳遞。所以你的changeVariable方法實際上只是一個無操作...它改變了參數的值,但這對var1沒有任何影響。

沒有一個更具體的例子,很難知道這是否是一個好主意 - 我懷疑它不是 - 但你嘗試的方式肯定將無法​​正常工作。

+0

(慚愧..我還是相當新的java的!)我試圖使掛鉤列表,其中每個變量是對每個列表中第一個項目的引用。我基本上有10個列表。我還不能提供可靠的代碼來展示,因爲我還只處於計劃階段。 – jcaoile 2012-02-25 17:53:07

+0

@jcaoile:你真的*需要* 10個單獨的列表變量嗎?對於一個包含10個列表變量的類來說,它聽起來可能不是一個好設計。也許是一個列表的集合?如果不知道具體的細節,很難提供更多建議。 – 2012-02-25 18:23:02

+0

本質上,我有單獨的列表根據特定的屬性對數據進行排序/分組,這些屬性在關聯的實體類(構成每個鏈接列表的「鏈接」)中定義。你是正確的,因爲列表是在一個基本上是集合類的類中定義的。在你的回答和Dave的下面進一步研究之後,我開始認爲最直接和最簡單的方法是讓方法更改每個實例變量,或者在這種情況下,引用每個單獨列表的下一個鏈接。你會同意這是一個明智的做法嗎? – jcaoile 2012-02-25 18:37:39

0

這不是Java的工作原理;您可以更改由參數引用的對象的屬性,但不能更改參數本身的值。如果這是您的需要,您可能需要考慮一種不同的方法,或許可以按名稱引用的地圖。

(從技術上講,你可以通過屬性作爲一個字符串,並使用反射的名字,但請不要。)

相關問題