java - 无法调用该方法或更改 HashMap 中的值

标签 java hashmap

所以我首先定义了一个hashmap:

HashMap<String, PrivateChat> hash = new HashMap<String, PrivateChat>();

PrivateChat 是一个具有字符串变体“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

关于java - 无法调用该方法或更改 HashMap 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29468312/

相关文章:

java - 不同的哈希码但 HashMap 不起作用

java - 为什么我的 HashSet 中有重复数据?

java - HashMap 中的 1 对 1 映射

java - 使用索引从 Map 中检索值

java - 空 View 不显示在 ListView 中

java - Spring框架请求范围和单例 Autowiring

java - 在同一个 Maven 项目中创建和使用 Web 服务

java - 我们如何从可编辑的Java代码生成IntelliJ IDEA中的序列图?

java - 如何让我的程序接受任意数量的数组而不是一组?

java - 为什么HashMap的运算复杂度没有考虑hash函数的复杂度?