【问题标题】:How can i create a method that modifies an object of another class(java)?我如何创建一个修改另一个类(java)的对象的方法?
【发布时间】:2016-02-16 22:09:28
【问题描述】:

我想创建一个以方法的形式存储一些事件的类。当其中一个被调用时,我想让它获取一个对象并对其进行修改,但如果我没记错的话,该方法的参数将只是真实对象的副本,所以它不会改变关于它的任何事情。 有没有办法做到这一点?我希望我已经足够清楚了......

【问题讨论】:

  • 事实并非如此。 Java 通过“按值传递引用”来传递对象。这接近于通过引用传递,并且您正在使用的对象是同一个对象
  • 你错了。 Java 是按值传递的,因此请先阅读相关内容。此外,setter 可能是您正在寻找的词。
  • @John java 确实总是按值传递。但它通过值传递引用。说它的价值传递在技术上是正确的,但具有严重的误导性
  • 是的,我知道这一点。通过引用传递意味着该方法可以更改为调用者站点上的对象引用“指向”。

标签: java object events methods parameters


【解决方案1】:

是的,你说 JAVA 是 pass by value 是对的,它会发送该对象的副本,但请记住,如果是对象,则该副本将指向与原始对象相同的引用。

您在传递的对象中修改的任何内容也将反映在原始对象中。这是因为引用仍然相同。

例如,

public class Foo {
    private int x;

    /* Getter-Setter */
}

现在,考虑以下两个对象:

Foo realObject = new Foo();
realObject.setX(1);

/* Call someMethod */
someMethod(Foo realObject);

/* someMethod Implementation */
public void someMethod(Foo copyObject) {
    copyObject.setX(5);
}

现在,您在copyObject 中所做的更改将反映在realObject 中,因为它在内部引用了相同的位置。因此,realObject 中x 的值将从1 变为5。

实现你想要做的最好的方法是在你的 POJO 类中使用复制构造函数。

例如,

public class Foo {
    private int x;

    public Foo(Foo f) {
        this.x = f.x;
    }
}

现在,您可以按如下方式复制对象:

Foo realObject = new Foo();
realObject.setX(1);

/* Make Copy */
Foo copyObject = new Foo(realObject);
copyObject.setX(5);

这次对copyObject 的更改不会影响realObject。 realObject 中的 x 的值仍将是 1。

【讨论】:

  • 对不起?您是说对象是副本还是引用是副本?我也不确定你为什么需要一个复制构造函数
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 2015-02-05
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
相关资源
最近更新 更多