所以我首先定义了一个哈希图:
HashMap<String, PrivateChat> hash = new HashMap<String, PrivateChat>();
PrivateChat是一个具有String变体“ ah”和方法“ add”的类。
但是后来当我尝试:
hash.get(name).add("hahaha"); // Add the value "hahaha" to ah variant.
它什么也没做。为了证明这是真实的,我尝试了:
System.out.println(hash.get(name).ah);
输出为“”。
因此,下次我尝试直接修改ah时:
hash.get(name).ah += "hahaha";
和奇怪的事情发生在我身上,啊依旧保持不变。
这确实是一个奇怪的问题,我认为以前没有人遇到过,因为我在stackoverflow上找不到任何结果。
请帮助:D谢谢
这是我当前的PrivateChat代码:
class PrivateChat {
public JPanel field1;
public JTextArea textArea1;
public JTextField textField1;
public JButton Send;
public JLabel eac;
public String ah = "";
PrivateChat(final String name, final BufferedWriter bw) {
eac.setText("You are talking with " + name);
textArea1.setEditable(false);
Send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ArrayList<String> arr = new ArrayList<String>();
arr.add(name);
arr.add(textField1.getText());
String nts = Convert.ConvertToString(arr);
try {
bw.write("/tell");
bw.flush();
bw.write(nts);
bw.flush(); // Gut.
add("\n[you] " + textField1.getText());
} catch (IOException e1) {
Send.setEnabled(false);
textField1.setEnabled(false);
textField1.setText("Failed: " + e1.toString());
}
}
});
}
public void main(String name, BufferedWriter bw) {
JFrame frame = new JFrame("PrivateChat");
frame.setContentPane(new PrivateChat(name, bw).field1);
frame.setPreferredSize(new Dimension(400, 300));
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public void add(String buf) {
ah += buf;
textArea1.setText(ah);
System.out.println("added: " + ah);
}
}
最佳答案
我已经测试了您所说的简化版本,以证明它应该可以工作。正如评论中提到的其他内容一样,您可能还需要向我们展示以及代码中的某些地方可能被破坏(抛出异常)。
另外,我强烈建议您将ah
变量的可见性更改为private,并让访问器修改其值,而现在实现的方式并不十分安全。
public class PrivateChat {
public String ah = "";
@Override
public String toString() {
return "PrivateChat{" +
"ah='" + ah + '\'' +
'}';
}
}
public class A {
HashMap<String, PrivateChat> hash = new HashMap<String, PrivateChat>();
public static void main(String[] args) {
A a = new A();
String myMapKey = "AAAA";
a.hash.put(myMapKey, new PrivateChat());
System.out.println("before modification:" + a.hash.get(myMapKey).ah);
a.hash.get(myMapKey).ah += "blahblah";
System.out.println("after modification:" + a.hash.get(myMapKey).ah);
}
}
before modification:
after modification:blahblah