是的,我知道那是不可能的;但問題是我真的需要這樣做。我會解釋整個圈套:Java - 如何從另一個方法訪問方法範圍內的ArrayList?
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;很簡單。
真正的問題是我打算用這個「Object」作爲一個值。我有一個圖形用戶界面和一個按鈕,它們調用「sendKeyToMatrix」,而另一個按鈕則爲textFields添加一個值。由於HashMaps的「.put()」方法需要一個Object,我必須首先創建鍵,第二個參數是「null」或THE PROBLEM(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的第二個參數「收到由textField給出的字符串,並且我遇到了大問題:
我不能將它添加到」sendKeyToMatrix「方法內的ArrayList,這很明顯,但這是一個大問題,因爲如果我聲明作爲一個領域的變量(所以我可以在其他範圍內訪問它),我得到錯誤和神祕的神祕結果是不明確的對我來說。
恢復在一個簡單的問題:如何訪問其他方法內的變量?
如果我在「attachValueToKey」中聲明瞭變量,它會在每次按下按鈕時在ArrayList中創建一個ArrayList。
那麼,我感謝大家的幫助。可能必須有一種方法來通過面向對象的魔法召喚解決方案,並帶有實例等。
您的帖子太長,無法閱讀,請在講述問題時非常具體。 – Azad 2013-05-04 18:25:01