2012-02-25 97 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的工作原理;您可以更改由参数引用的对象的属性,但不能更改参数本身的值。如果这是您的需要,您可能需要考虑一种不同的方法,或许可以按名称引用的地图。

(从技术上讲,你可以通过属性作为一个字符串,并使用反射的名字,但请不要。)

相关问题