Java - 如何从另一个方法访问方法范围内的ArrayList?

时间:2013-05-04 18:11:54

标签: java scope hashmap

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

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,其中键是一个String,它的值是一个Object;非常简单。

真正的问题在于我打算用这个&#34;对象&#34;作为一种价值。我有一个GUI和一个调用&#34; sendKeyToMatrix&#34;的按钮,以及另一个从textFields为它附加值的按钮。自&#34; .put()&#34; HashMaps的方法需要一个Object,我必须先创建一个键,第二个参数是&#34; null&#34;或问题(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);
}}

当我打电话给&#34; sendKeytoMatrix&#34;使用按钮,它会创建一个带有空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);

        }
    });

&#34; attachValueToKey&#34;的第二个参数。收到textField给出的字符串,我遇到了一个大问题:

我无法将其添加到&#34; sendKeyToMatrix&#34;内的ArrayList中。方法,这是显而易见的,但这是一个很大的问题,因为如果我将变量声明为那里的一个字段(这样我可以在另一个范围内访问它),我就会出错,而且我会发现一些未知的神秘结果对我来说。

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

如果我在&#34; attachValueToKey&#34;中声明变量,每次按下按钮时,它都会在ArrayList内部创建一个ArrayList。

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

2 个答案:

答案 0 :(得分:2)

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

void attachValueToKey(Object object, Object value) {
    ArrayList a = matrix.get((String) object);
    a.add(value));
}

答案 1 :(得分: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);

        }
    });