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