0

是的,我知道那是不可能的;但问题是我真的需要这样做。我将解释整个陷阱:

public class MainMethods {

ArrayList arrayOfValues; // << PROBLEM

HashMap<String, Object> matrix = new HashMap<String, Object>();

void sendKeyToMatrix(String key) {
    arrayOfValues = new ArrayList();
    matrix.put(key, arrayOfValues);
}

void attachValueToKey(Object object, Object value) {
    matrix.put((String) object, arrayOfValues.add(value));
}

void removeFromMatrix(String key) {
    matrix.remove(key);
}}

那是我的课,那些是我的方法。我创建了一个 HashMap,键是字符串,值是对象;很简单。

真正的问题是我打算用这个“对象”作为一个值做什么。我有一个 GUI 和一个调用“sendKeyToMatrix”的按钮,以及另一个附加值的按钮,两者都来自 textFields。由于 HashMaps 的“.put()”方法需要一个对象,并且我必须首先创建键,所以第二个参数是“null”或问题(ArrayList)。

完美的解决方案:

public class MainMethods {

HashMap<String, Object> matrix = new HashMap<String, Object>();

void sendKeyToMatrix(String key) {
    ArrayList arrayOfValues = new ArrayList();
    matrix.put(key, arrayOfValues);
}

void attachValueToKey(Object object, Object value) {
    matrix.put((String) object, ghostOrigin.add(value));
}

void removeFromMatrix(String key) {
    matrix.remove(key);
}}

当我用按钮调用“sendKeytoMatrix”时,它会创建一个以空 ArrayList 作为其值的键。这个键被添加到我的 JList 中。然后,当我调用第二个按钮(考虑在 JList 中选择的内容)时,我将一个元素添加到 ArrayList:

第二个按钮的代码:

btnInsertContent.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            mainMethods.attachValueToKey(mainList.getSelectedValue(), textContent.getText());
            mainCombo.addItem(textContent.getText());
            System.out.println(mainMethods.matrix);

        }
    });

“attachValueToKey”的第二个参数接收文本字段给出的字符串,我遇到了大问题:

我不能将它添加到“sendKeyToMatrix”方法内的 ArrayList 中,这很明显,但这是一个大问题,因为如果我将变量声明为那里的字段(这样我就可以在另一个范围内访问它) ,我得到了我不知道的错误和深奥的结果。

在一个简单的问题中恢复这一点:如何访问其他方法中的变量?

如果我在“attachValueToKey”中声明变量,每次按下按钮时,它将在 ArrayList 内创建一个 ArrayList。

嗯,谢谢大家的帮助。可能必须有一种方法通过面向对象的魔法召唤解决方案,并带有实例等。

4

2 回答 2

2

我想这样的事情应该回答你的问题:

void attachValueToKey(Object object, Object value) {
    ArrayList a = matrix.get((String) object);
    a.add(value));
}
于 2013-05-04T18:23:25.110 回答
1

出于学习目的,我将在这里留下我通过 Lazarus 找到的解决方案:

public class MainMethods {

HashMap<String, Object> matrix = new HashMap<String, Object>();

void sendKeyToMatrix(String key) {
    ArrayList<Object> arrayOfValues = new ArrayList<Object>();
    matrix.put(key, arrayOfValues);
}

void attachValueToKey(Object object, String value) {
    ArrayList<String> arrayInMatrix = (ArrayList<String>) matrix.get(object);
    arrayInMatrix.add(value);
    matrix.put((String) object, arrayInMatrix);
}

void removeFromMatrix(String key) {
    matrix.remove(key);
} }

按钮的作用:

btnInsertContent.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            mainMethods.attachValueToKey(mainList.getSelectedValue(), textContent.getText());
            mainCombo.addItem(textContent.getText());
            System.out.println(mainMethods.matrix);

        }
    });
于 2013-05-04T19:19:57.283 回答