Rückgabewert ändert sich?

Status
Nicht offen für weitere Antworten.

AlexDozer

Aktives Mitglied
Hi,

ich mache folgenden Aufruf:

Java:
			//Hole die Werte für die einzelnen Tags
			ArrayList<String> columns = xml.getValuesFromOneTag("column", "wert");
			ArrayList<String> tables = xml.getValuesFromOneTag("table", "wert");
			ArrayList<String> askvalue = xml.getValuesFromOneTag("askvalue", "wert");

Jetzt habe ich das Problem das in den ersten beiden Arrays genau das selbe drinsteht wie in dem letzten. Wie kann das sein? Ist mein Array nur eine Referenz auf ein anderes Array oder wie darf ich das verstehen? Wie behebe ich das Problem?

Gruß Alex
 
muss man xml.getValuesFromOneTag kennen?
was die Funktion liefert ist sonst entscheidend aber unbekannt,

die Listen kopieren könntest du mit new ArrayList(alteListe), auf Identität prüfen mit ==
 
Java:
public class CXml {

    private Element root;
	private Element tag;
	
	private int amount_elements;
	private ArrayList<String> list;
		
	//Zum holen eines Tags eines mehreren vorkommenden Elementes
	public ArrayList<String> getValuesFromOneTag(String p_tag, String p_element)
	{
		clearArray();
		
		amount_elements = root.getChildren(p_element).size();
				
		for (int i = 0; i < amount_elements; i++)
		{
			tag = (Element) root.getChildren(p_element).get(i);
			list.add(tag.getChild(p_tag).getValue());
		}
		
		return list;
	}
	
	private void clearArray()
	{
		list.clear();
	}

Den Konstruktor sowie andere Methoden hab ich mal weggelassen damit es nicht zu unübersichtlich wird.
 
Die Methode gibt immer nur eine Referenz zurück, deswegen zeigen die Variablen columns, tables und askvalue auf exakt dasselbe.

Entweder gibts du jedesmal eine Kopie der ArrayList zurück, oder du machst "list" zu einer lokalen Variable und erstellst für jeden Aufruf eine neue ArrayList (was du bei der Kopie-Variante ja auch tun würdest...)
 
Ich habe es jetzt so gelöst:
Java:
            ArrayList<String> columns = new ArrayList<String>(xml.getValuesFromOneTag("column", "wert"));
			ArrayList<String> tables = new ArrayList<String>(xml.getValuesFromOneTag("table", "wert"));
			ArrayList<String> askvalue = new ArrayList<String>(xml.getValuesFromOneTag("askvalue", "wert"));

@Schandro: Wie meinst du das mit "Entweder gibts du jedesmal eine Kopie der ArrayList zurück"?
 
es wär doch sinnvoller, IN der Methode getValuesFromOneTag die Kopie zu erstellen, anstatt sich darauf zu verlassen das es jeder Aufrufer macht.
 
warum? macht ja keinen sinn!

spar dir die membervarialbe
private ArrayList<String> list;

und erstell in der methode getValuesFromOneTag eine neue arralist


und hört bitte auf ein C vor eine klasse zu schreiben ,-)
 
Java:
public class CXml {
	 
    private Element root;
    private Element tag;
    
    private int amount_elements;
     
        
    //Zum holen eines Tags eines mehreren vorkommenden Elementes
    public ArrayList<String> getValuesFromOneTag(String p_tag, String p_element)
    {
        
    	ArrayList<String> list = new ArrayList<String>();
        amount_elements = root.getChildren(p_element).size();
                
        for (int i = 0; i < amount_elements; i++)
        {
            tag = (Element) root.getChildren(p_element).get(i);
            list.add(tag.getChild(p_tag).getValue());
        }
        
        return list;
    }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben