我如何创建一个修改另一个类(java)的对象的方法?

时间:2016-02-16 22:09:29

标签: java object events methods parameters

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

1 个答案:

答案 0 :(得分:0)

是的,你说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中,因为它在内部引用了相同的位置。因此,xrealObject的值将从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不会影响realObjectxrealObject的值仍为1