2013-05-04 112 views
0

是的,我知道那是不可能的;但問題是我真的需要這樣做。我會解釋整個圈套: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。

那麼,我感謝大家的幫助。可能必須有一種方法來通過面向對象的魔法召喚解決方案,並帶有實例等。

+0

您的帖子太長,無法閱讀,請在講述問題時非常具體。 – Azad 2013-05-04 18:25:01

回答

2

像這樣的東西應該回答你的問題,我想:

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

非常感謝! – 2013-05-04 18:32:21

1

爲了便於學習,我會離開這裏的解決方案,我發現由於拉撒路:

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); 

     } 
    }); 
相關問題