0

所以在伪代码中是这样的。

class Example {
    private ExampleState state;
    private List<ExampleState> states;
    public Example() {
        state = new ExampleState(parameters);
        CustomAdapter = new CustomAdapter(context, state);
    }

    public someMethod() {
        state = states.get(states.size() - 1);  
        cellAdapter.notifyDataSetChanged(); 
    }

}

class CustomAdapter {
    protected ExampleState state; // that's where data is

    public CustomAdapter(Context context, ExampleState state) {
        this.state = state;
    }
}

在 someMethod 之后,CustomAdapter 状态字段保持不变。正如我所想的那样,起初我在 Example 构造函数中创建对象 ExampleState 。然后我将对它的引用传递给适配器。然后我将对象更改为引用另一个对象。

所以在 someMethod 之前,Example 和 CustomAdapter 中字段“state”的 id 是相同的。之后,示例中的一个是新的,而 CustomAdapter 中的一个是旧的。为什么参考没有更新?

4

1 回答 1

0

这是 Java 值传递的示例

在这个方法中

public someMethod() {
    state = states.get(states.size() - 1);  
    cellAdapter.notifyDataSetChanged(); 
}

您更改存储在state.

然而,在

class CustomAdapter {
    protected ExampleState state; // that's where data is

    public CustomAdapter(Context context, ExampleState state) {
        this.state = state;
    }
}

在构造函数中,您被传递了ExampleState引用值的副本。这是原始(旧)值。更改Example对象中的该引用不会影响该CustomAdapter.state引用。

相反,您应该将Example对象传递给CustomAdapter构造函数并存储并始终检索其state引用。

于 2013-09-26T17:42:01.950 回答