Spring中传递引用的问题

时间:2011-08-07 17:15:41

标签: java spring pass-by-reference

public class Apple
{
    private boolean isJuicy;
    private boolean isRipe;

    public Apple(boolean isJuicy)
    {
        isJuicy = isJuicy;
    }

    public void setRipe(boolean ripe)
    {
        this.isRipe = ripe;
    }

    public boolean isRipe()
    {
        return this.isRipe;
    }

}

在Spring,我有两个服务类AppleService& FruitService

AppleService

public Apple createApple(boolean isJuicy)
{
    Apple apple = null;
    apple = new Apple(isJuicy);
    fruitService.saveApple(apple);

    log("ripe:" + apple.isRipe()); // false

    return apple;
}

FruitService

public void saveApple(Apple apple)
{
    if(apple.isJuicy())
        apple.setRipe(true);

    persist(apple);

    log("ripe:" + apple.isRipe()); // true

}

为什么Apple报告在FruitService但在AppleService中没有成熟?

我认为通过引用FruitService传递的事实保证了AppleService中apple对象中应该存在相同的对象和对象属性吗?

2 个答案:

答案 0 :(得分:1)

我认为问题是这样的:当isJuicy作为true传入时,你没有在构造函数中将isRipe设置为true。在java中,unset布尔值的默认值为false。 这将解决它:

private boolean isRipe;

public Apple(boolean isJuicy) {
    this.isJuicy = isJuicy; // Note: added "this.", otherwise your assignment just sets the parameter to itself
    isRipe = isJuicy; // Set isRipe too
}

答案 1 :(得分:0)

虽然我同意关于这个问题的评论(你需要发布更多代码),但我确信这里的核心问题是,Java是从不传递引用。它传递原始值的原始值,并传递对象的“对象引用”(基本上是指针)。

在Java中,当您获取作为参数传递的对象时,调用该对象上的方法将影响传递的原始对象。但实际上为对象赋值不会影响传递的对象,而是将引用(也就是指针)设置为新对象。

更好地解释here。您可能还想查看this StackOverflow问题。