2016-08-31 44 views
2

有没有更好的方法(可能..)建立一个类,我可以使用set/get方法。 注意,所有的数据都在一个ArrayList中。在java中我的构造函数有什么问题?

public class PorterList 
{ 
    public PorterList() 
    { 
     ArrayList<Porter> porList = new ArrayList<>(); 
    } 
    public PorterList(ArrayList<Porter> p) 
    { 
     ArrayList<Porter> porList = p; 
    }  

    SimpleDateFormat porterDF = new SimpleDateFormat("HH:mm:ss"); 
    private Porter p = new Porter(); 
    private int _porterNo; 
    public String getStatus(int porterNo) 
    { 
     _porterNo = porterNo; 
     p = porList.get(_porterNo); 
     return p.p_state; 
    } 

有一些吃亏的倒数第二行P = porList获得(_porterNo);

我想用这样的事情在我的主:

p_L = PorterList(p) 
porter_status = p_L.get(5) 

非常感谢您

回答

0

当你声明ArrayList porList = p;构造函数里面,它会成为局部变量,因此它不会对构造函数外是可见的,如果你希望它在你的职业等级使用声明它在全球范围内liek低于

public class PorterList 
{ 
    private ArrayList<Porter> porList; 

    public PorterList() 
    { 

    porList = new ArrayList<>(); 

    } 
    public PorterList(ArrayList<Porter> p) 
    { 
     porList = p; 
    } 

} 
0

在这两个你的构造你声明局部变量porList的 - 使这个领域

public class PorterList 
{ 
    private ArrayList<Porter> porList; 

    public PorterList() 
    { 
     porList = new ArrayList<>(); 
    } 
    public PorterList(ArrayList<Porter> p) 
    { 
     porList = p; 
    } 
.... 
} 
+0

谢谢你,我明白了! – Chopin

+0

在no-arg构造函数中执行'porList = new ArrayList <>();'并从字段中移除初始值设定项,这样就不会在第二个构造函数中浪费'new ArrayList <>()'。 – Andreas

+0

@Andreas你是对的,我在想什么。 –

1

尤尔的ArrayList是局部变量,它的你的问题。这应该是一个领域。

private ArrayList<Porter> porList; 
public PorterList() { 
    porList = new ArrayList<>(); 
} 
public PorterList(ArrayList<Porter> p 
{ 
    porList = p; 
}