首先:我忘记了“自动更新”这个词,但我的意思是:
int x = 5;
int y = x;
System.out.println(y); //Prints 5
x = 3;
System.out.println(y); //Now prints 3!
(对于使用此作为参考的任何人的注意事项:上面的示例是错误的,如评论中所述。)
但是我在列表上尝试了这种方法,但它不起作用,我的代码:
Account.java 的相关部分:
public class Account extends Entity<String, Account> {
private String username;
private String password;
public Account(final String username, final String password) {
this.username = username;
this.password = password;
key = username;
data.add(password);
}
public String getUsername() {
return username;
}
public void setUsername(final String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(final String password) {
this.password = password;
}
}
Entity.java 的相关部分:
abstract public class Entity<K, D> {
protected K key;
protected List<Object> data;
public Entity() {
data = new ArrayList<>();
}
public K getKey() {
return key;
}
public List<Object> getData() {
return data;
}
protected List<Object> createData(final DataAction dataAction) {
List<Object> list = new ArrayList<>();
if (dataAction == DataAction.INSERT) {
list.add(key);
}
list.addAll(data);
if (dataAction == DataAction.UPDATE) {
list.add(key);
}
return list;
}
}
每当我有例如 this Account account = new Account("test", "1");
,然后当我使用System.out.println(account.getData())
它时 print [1]
,那仍然是正确的。但是当我执行account.setPassword("11");
然后随后System.out.println(account.getData())
它仍然打印[1]
而不是预期的[11]
.
我希望它data
会自动更新,就像x = y
指向相同的内存位置一样。
任何猜测发生了什么?执行错误?还是特色?我怎样才能有效地解决这个问题?
问候。
编辑:更改setPassword()
为下面的代码,现在它应该可以工作了:
public void setPassword(final String password) {
int index = data.indexOf(this.password);
this.password = password;
data.set(index, password);
}
但是我想知道,没有更好的解决方案吗?因为它现在需要三行代码,其中两行很容易被遗忘。