提问人:Beau 提问时间:6/16/2023 更新时间:6/16/2023 访问量:121
如何更改未调用该方法的对象的实例变量的值?
How to change the value of an instance variable of an object that didn't call the method?
问:
我正在用 java 编写一个程序,其中我想更改方法中对象的实例变量的值,而该对象尚未调用该方法。我正在尝试做一些类似于附加代码的事情。我想在myMethod方法中更改object2.num,但这会产生错误,因为object2超出了myMethod的范围。
public class Main {
public static void main(String[] args) {
Item object1 = new Item(2);
Item object2 = new Item(4);
object1.myMethod();
System.out.println(object1.num + " " + object2.num);
}
}
class Item {
int num;
Item(int n) {
num = n;
}
public int myMethod() {
object2.num *= this.num;
this.num *= object2.num;
}
}
我想出的唯一解决方案是给 object1 一个额外的实例变量 num2,它将充当 object2.num。在方法之外,我将 object2.num 更改为 object1.num2。然而,这似乎非常不理想,并且在使用多个变量进行更改时会变得很烦人。有没有更有效的方法来实现这一目标?
我对编码还很陌生,可能已经有解决方案了,所以任何帮助或解决方案的链接将不胜感激。
答:
"...我想更改方法中对象的实例变量的值,而该对象尚未调用该方法......”
从技术上讲,如果对象的变量是静态的,则可以。
虽然,对于您当前的设计来说,这似乎不合逻辑。
"...我想在myMethod方法中更改object2.num,但这会产生错误,因为object2超出了myMethod的范围。..."
没错,在 Java 中,如果没有实际对象,您将无法更改对象的变量。
"...我想出的唯一解决方案是给 object1 一个额外的实例变量 num2,它将充当 object2.num。在方法之外,我将 object2.num 更改为 object1.num2。..."
您必须提供有关任务的功能用途的更多详细信息。
我建议将 object2 作为参数传递给 myMethod。
此外,我必须在这里添加一个返回值,因为该方法返回一个 int。
public int myMethod(Item object2) {
object2.num *= this.num;
return this.num *= object2.num;
}
或者,可以只声明具有 void 返回类型的方法。
public void myMethod(Item object2) {
object2.num *= this.num;
this.num *= object2.num;
}
然后,提供 object2 作为参数。
object1.myMethod(object2);
输出
16 8
评论
myMethod
public void myMethod(Item otherItem) {...}
Item.java
class Item {
}
object2
object2
Item