2016-09-30 6 views
0
public class NetworkEntry { 
    private String name; 
    private int cost; 
    private StringListExt predList; 
    private StringListExt succList; 

public NetworkEntry(String nameval, int costval, String pred){ 
    name = nameval; 
    cost = costval; 
    predList = new StringListExt(); 
    succList = new StringListExt(); 
    predList.add(pred); 
} 

Also soll der Konstruktor predList und succList instanziieren, während er die rote Zeichenfolge innerhalb der predList hinzufügt. Wenn ich jedoch print anrufe, um zu sehen, was sich in predList und succList befindet, erscheint pred in beiden.Es wird versucht, einer Zeichenfolge eine Zeichenfolge hinzuzufügen, aber ZWEI Zeichenfolgelisten eine Zeichenfolge hinzuzufügen.

Und StringListExt ist nur eine Erweiterung von

protected static ArrayList <String> list; 


public StringList() { 
    list = new ArrayList <String>(); 
} 

Antwort

2

nicht statisch verwenden

protected static ArrayList <String> list; 

Wenn Sie statische verwenden, das bedeutet, dass es nur eine dieser Variablen sein wird - geteilt zwischen allen Instanzen in der JVM.

Per https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Manchmal wollen Sie Variablen haben, die auf alle Objekte gemeinsam sind. Dies wird mit dem statischen Modifikator erreicht. Felder mit dem statischen Modifizierer in ihrer Deklaration heißen statische Felder oder Variablen. Sie sind mit der Klasse assoziiert und nicht mit irgendeinem Objekt. Jede Instanz der Klasse teilt eine Klassenvariable, die an einem festen Speicherort im Speicher ist. Jedes Objekt kann den Wert einer Klassenvariablen ändern, aber Klassenvariablen können auch manipuliert werden, ohne dass eine Instanz der Klasse erstellt wird.

Verwandte Themen