2013-03-19 1 views
-1
public class ServersList { 

    private Host host; 
    private Server server; 
    private InfoList infoList; 
    private List<AbcInformation> abcInformation; 

    @XmlElement(name = "Host") 
    @JsonProperty("Host") 
    public Host getHost() { 
     return this.host; 
    } 

    //Get Set functions for all object 
} 

Nous avons la classe ci-dessus. Il contient un objet d'autres classes et des méthodes get/set comme indiqué ci-dessus. Nous analysons un fichier XML et créons un tableau de classe ServersList. Par exemple,création d'objet Java

ServersList[] serversArray = new ServersList[count]; 
for (int index = 0; index < count; index++) { 
    serversArray[index] = new ServersList(); 

    serversArray[index].setInfoList(serConfig 
      .getInfoList()); 
    serversArray[index].setHost(serConfig 
      .getHost()); 
    serversArray[index].setServer(serConfig 
      .getServer()); 

    serversArray[index].getHost().setCid(
    listResponse.getHost().get(index).getCid()); 
    serversArray[index].getHost().setCName(
    listResponse.getHost().get(index).getCname()); 
    serversArray[index].getHost() 
     .setCurrentName(listResponse.getHost().get(index) 
    .getCurrentName()); 
    serversArray[index].getHost().setHostName(listResponse.getHost(). 
    get(index).getName()); 
    serversArray[index].getHost().setHostUuid(
    listResponse.getHost().get(index).getId()); 

} 

Notre problème est après la boucle toutes les valeurs du tableau serversArray seront même (peut-être avec le dernier élément dans le fichier XML). Lors du débogage, je comprends que, à chaque itération, la valeur de chaque ligne change les valeurs de la ligne courante. Pouvez-vous suggérer une solution pour cela?

+4

devrait-il pas être serversArray [index] = new ServersList(); ? –

+0

lorsque vous affectez le nouvel objet à chaque élément, le résultat sera le même. – Ankit

+0

vous devez également publier le code où vous remplissez l'objet 'ServersList'. – Azodious

Répondre

0

Finalement, j'ai trouvé la solution. J'ai ajouté des constructeurs de copie pour les classes suivantes

ServersList, hôte, serveur, infolist, AbcInformation

0

Essayez de le faire, cela devrait fonctionner.

public static void main(String[] args) { 
     ServersList sList=null; 
     int count=10; 
     ServersList[] serversArray = new ServersList[count]; 
     for (int index = 0; index < count; index++) { 
      sList = new ServersList(); 
      sList.setHost(....); 
      //..........other setter........... 
      serversArray[index] = sList; 
     } 

     for (ServersList serversList : serversArray) { 
      System.out.println(serversList.getHost()); 
     } 
    } 
+0

J'ai essayé de cette façon. Mais pas résolu mon problème .. – developerXXX

+0

J'ai ajouté le constructeur suivant dans la classe ServersList \t 'Public ServersList() { \t \t host = new Host(); \t \t serveur = nouveau serveur(); \t \t infoList = nouvelle InfoListe(); \t} 'Mais pas moyen .. – developerXXX