是的,我知道这是不可能的;但问题是我真的需要这样做。我将解释整个陷阱:
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。
好的,我感谢大家的帮助。可能必须有一种方法通过面向对象的魔法,实例等来召唤解决方案。
答案 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);
}
});