2017-10-17 10 views
-6

Warum sind meine Modellklassendaten falsch?Warum meine Modellklasse, Daten sind falsch?

enter image description here

List<DataMasterList> dataMasterLists = new ArrayList<DataMasterList>(); 

private void addMaster() { 
    for (int i = 0; i < 6; i++) { 
     DataMasterList dataMasterList = new DataMasterList(); 
     dataMasterList.setMaster_code("000" + i); 
     dataMasterList.setProduct_name("name" + i); 
     dataMasterList.setAmount(4 + i + ""); 
     dataMasterList.setUnit_price(10 + ""); 
     dataMasterLists.add(dataMasterList); 
     Log.d("test1",dataMasterLists.get(i).getMaster_code()+" "); 
    } 

    Log.d("test2",dataMasterLists.get(0).getMaster_code()+" "); 
} 

Inhalt des Log.d:

test1: 0000 
test1: 0001 
test1: 0002 
test1: 0003 
test1: 0004 
test1: 0005 

test2: 0005 

Warum test2 = 0005?

Warum ist jeder Wert in dataMasterLists0005?

+3

Geben Sie keinen Code als Bild ein. posten Sie es als Text – Jens

+3

Verwenden Sie einen Debugger, um herauszufinden, warum Ihr Code nicht funktioniert – Jens

+2

Nach diesem https://stackoverflow.com/a/19843507/4730957 könnte es aufgrund statischer Felder in der Klasse sein. Können Sie bitte den DataMasterList-Klassencode hinzufügen? –

Antwort

0

Das Problem betrifft Zugriffsmodifikatoren, die das Klassenverhalten der Felder ändern. Sie machen Verwirrung mit Klasseninstanzvariablen und Klassenvariablen.

Fall 1 (Instanzvariable)

public class DataMasterList { 

    private String masterCode; 

    public DataMasterList() { 
     // TODO Auto-generated constructor stub 
    } 

    public String getMasterCode() { 
     return this.masterCode; 
    } 

    public void setMasterCode(String masterCode) { 
     this.masterCode = masterCode; 
    } 

private String masterCode; Sie in diesem Feld nur mit Zugriffsmethoden und beim Erstellen einer neuen Instanz, jede Instanz haben eigenen Bereich zugreifen können.

Fall 2 (statische Variable)

public class DataMasterList { 

    static String masterCode; 

    public DataMasterList() { 
     // TODO Auto-generated constructor stub 
    } 

    public static String getMasterCode() { 
     return masterCode; 
    } 

    public static void setMasterCode(String masterCode) { 
     DataMasterList.masterCode = masterCode; 
    } 

} 

static String masterCode; kann man sich auf das Gebiet ohne Accessormethoden direkt zugreifen und ohne jede Instanz des Objekts erstellen. Jedenfalls, wenn Sie Instanzen wie in Ihrem Fall erstellen, wenn Sie das letzte Mal den MasterCode ändern, wird es alle Instanzen auswirken.

Verwandte Themen