在同一类中的方法中将实例变量作为参数传递?

passing instance variable as parameter in method within same class?

提问人:jcaoile 提问时间:2/26/2012 最后编辑:skaffmanjcaoile 更新时间:2/26/2012 访问量:2877

问:

是否可以将实例变量作为参数传递给同一类中的方法?

请看下面的代码:

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.

Java 按引用传递

评论


答:

0赞 Jon Skeet 2/26/2012 #1

这不仅愚蠢 - 它不会起作用。Java 中的参数总是按值传递。所以你的方法真的只是一个不操作......它更改了参数的值,但这对 没有区别。changeVariablevar1

如果没有一个更具体的例子,很难知道这是否是一个好主意——我怀疑它不是——但你尝试它的方式肯定行不通。

评论

0赞 jcaoile 2/26/2012
(惭愧..我对 java 还很陌生!我正在尝试制作链表,其中每个变量都是对每个列表中第一项的引用。我基本上有 10 个列表。我还不能提供可靠的代码来展示,因为我仍处于规划阶段。
0赞 Jon Skeet 2/26/2012
@jcaoile:你真的需要 10 个单独的列表变量吗?对于一个包含 10 个列表变量的类,听起来可能不是一个好的设计。也许是列表的集合?在不了解具体细节的情况下,很难提供更多建议。
0赞 jcaoile 2/26/2012
从本质上讲,我有单独的列表来根据特定属性对数据进行排序/分组,该属性在关联的实体类(构成我的每个链表的“链接”)中定义。您是正确的,因为列表是在基本上是集合类的类中定义的。在对您的回答和 Dave 的回答进行进一步研究后,我开始认为最直接和最简单的方法是让一种方法更改每个实例变量,或者在这种情况下,引用每个单独列表的下一个链接。你同意这是一个明智的方法吗?
0赞 Jon Skeet 2/26/2012
@jcaoile:现在还不是很清楚,但听起来你有几个列表,长度都一样。最好有一个实体类型的列表。但我可能误会了。一个完整的例子会很有用。
0赞 Dave Newton 2/26/2012 #2

这不是 Java 的工作方式;您可以更改参数引用的对象的属性,但不能更改参数本身的值。如果需要,您可能需要考虑使用不同的方法,也许是可以按名称引用的地图。

(从技术上讲,您可以将属性的名称作为字符串传递并使用反射,但请不要这样做。