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

Posted

技术标签:

【中文标题】将实例变量作为参数传递给同一类中的方法?【英文标题】:passing instance variable as parameter in method within same class? 【发布时间】:2012-03-15 19:50:27 【问题描述】:

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

请看下面的代码:

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没有影响。

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

【讨论】:

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

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

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

【讨论】:

以上是关于将实例变量作为参数传递给同一类中的方法?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以创建同一对象的不同实例并通过将参数传递给 Koin 中的 get() 函数来访问它们?

12_面向对象

如何将一个类函数传递给同一个类中的另一个?

如何将变量参数传递给 C++ 中的 DBUS 方法调用?

Spring MVC:将模型作为参数传递给控制器​​方法VS显式实例化它

如何正确地将参数传递给 Django 中的基于类的视图实例?