2016-08-31 3 views
2

Gibt es einen besseren Weg (wahrscheinlich ..), eine Klasse zu erstellen, in der ich die set/get-Methode verwenden kann. Beachten Sie, dass alle Daten in einer ArrayList enthalten sind.Was ist falsch mit meinem Konstruktor in 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; 
    } 

Irgendwas stimmt nicht an diesem vorletzten Zeile p = porList .get (_porterNo);

Ich möchte in meinem Haupt, so etwas verwenden:

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

Vielen Dank

Antwort

0

Wenn Sie ArrayList porList = p deklarieren; innerhalb des Konstrukteure, wird es lokale Variable werden, so dass es außerhalb dieses Konstruktor nicht sichtbar ist, wenn Sie es in Ihrer Klasse Ebene verwenden mögen, es erklären zu global liek unter

public class PorterList 
{ 
    private ArrayList<Porter> porList; 

    public PorterList() 
    { 

    porList = new ArrayList<>(); 

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

} 
0

In beiden Ihrer Konstrukteurs Sie lokale Variable porList erklärt haben - machen dies zu einem Feld

public class PorterList 
{ 
    private ArrayList<Porter> porList; 

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

Danke Mann, ich schätze es! – Chopin

+0

Führe 'porList = new ArrayList <>();' in den no-arg-Konstruktor und entferne den Initialisierer aus dem Feld, damit du keine 'new ArrayList <>()' im zweiten Konstruktor verschwendest. – Andreas

+0

@Andreas Sie haben Recht, was habe ich gedacht. –

1

Yor Arraylist ist lokaler Variable und es ist Ihr Problem. Es sollte ein Feld sein.

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