2016-09-30 138 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); 
} 

所以构造函数应该实例化predList和succList,同时在predList中添加红色的字符串。但是,当我调用print来查看predList和succList中的内容时,pred会出现在它们两个中。尝试将字符串添加到一个字符串列表,但最终将字符串添加到两个字符串列表。

而且StringListExt只是

protected static ArrayList <String> list; 


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

回答

2

延期不要使用静态

protected static ArrayList <String> list; 

如果你使用静态的,这意味着,只会有这个变量之一 - 所有实例之间共享在JVM中。

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

有时候,你想有一个适用于所有对象的变量。 这是用静态修饰符完成的。在其声明中使用了静态修饰符的字段称为静态字段或类 变量。他们与班级相关联,而不是与任何 对象关联。每个类的实例在内存中的一个固定位置共享一个类变量,即 。任何对象都可以更改 类变量的值,但也可以在不使用 创建类的实例的情况下操作类变量。