提问人:jcaoile 提问时间:2/26/2012 最后编辑:skaffmanjcaoile 更新时间:2/26/2012 访问量:2877
在同一类中的方法中将实例变量作为参数传递?
passing instance variable as parameter in method within same class?
问:
是否可以将实例变量作为参数传递给同一类中的方法?
请看下面的代码:
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.
答:
0赞
Jon Skeet
2/26/2012
#1
这不仅愚蠢 - 它不会起作用。Java 中的参数总是按值传递。所以你的方法真的只是一个不操作......它更改了参数的值,但这对 没有区别。changeVariable
var1
如果没有一个更具体的例子,很难知道这是否是一个好主意——我怀疑它不是——但你尝试它的方式肯定行不通。
评论
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 的工作方式;您可以更改参数引用的对象的属性,但不能更改参数本身的值。如果需要,您可能需要考虑使用不同的方法,也许是可以按名称引用的地图。
(从技术上讲,您可以将属性的名称作为字符串传递并使用反射,但请不要这样做。
上一个:难以理解引用传递
评论