Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > ArrayList


Автор: rith2 12.5.2011, 04:23
Привет!

Краткое описание

Класс DBFClassWorker (Объект - сотрудник)
Код


public class DBFClassWorker extends Object {

    private Integer WorkerId;//таб номер согласоно стоблцу в дбф
    private String WorkerName;//фио
    private String WorkerHolidayStart; 
    private String WorkerHolidayEnd;
    private String WorkerDischarge;
    private String WorkerKomandStart;
    private String WorkerKomandEnd;

//Соответственно для этих полей есть геттеры и сеттеры


Запись объектов в ArrayList

Код

public List<DBFClassWorker> GetInfo() {

        List<DBFClassWorker> Workers = new ArrayList() ; //список сотрудников
 
        DBFClassWorker Worker = new DBFClassWorker(); //конкретный сотрудник

        String  queryUvolnen = "SELECT code, fio, dateuv "
                                           + "FROM sspec";
        try {
            rs = stmt.executeQuery(queryUvolnen);
            while (rs.next()) {                                                   //запись результатов
                Worker.setWorkerDischarge(rs.getString(3));
                Worker.setWorkerName(rs.getString(2));
                Worker.setWorkerId(rs.getInt(1));
                Worker.setWorkerHolidayEnd(null);
                Worker.setWorkerHolidayEnd(null);
                Worker.setWorkerKomandStart(null);
                Worker.setWorkerKomandEnd(null);
                Workers.add(Worker);              
            }

            for (int i=0; i<Workers.size(); i++) {                 //тестовый вывод
                log.info(Workers.get(i).getWorkerName());
            }


Проблема - при тестовом выводе оказывается, что все элементы списка содержат одну и ту же запись, то есть данные по одному сотруднику (причем по сотруднику который находится в самом конце списка результата ResultSet). 

Если отдельно вывести результат ResultSet, то видно, что все возвращается верно. 

Вроде как старательно изучил FAQ с подобным примером, но не помогает  smile 

Критика приветствуется, сарказм приветствуется. В чем я затупил понять не могу, подскажите

Автор: Sibit 12.5.2011, 04:51
Я думаю, проблема в том, что создается всего один экземпляр класса Worker и при каждом считывании ему присваиваются новые значения. В итоге получается массив ссылок на один объект.

Код

        DBFClassWorker Worker;
        String  queryUvolnen = "SELECT code, fio, dateuv "
                                           + "FROM sspec";
        try {
            rs = stmt.executeQuery(queryUvolnen);
            while (rs.next()) {                                                   
                Worker = new DBFClassWorker();
                Worker.setWorkerDischarge(rs.getString(3));
                Worker.setWorkerName(rs.getString(2));
                Worker.setWorkerId(rs.getInt(1));
                Worker.setWorkerHolidayEnd(null);
                Worker.setWorkerHolidayEnd(null);
                Worker.setWorkerKomandStart(null);
                Worker.setWorkerKomandEnd(null);
                Workers.add(Worker);              
            }


Автор: rith2 12.5.2011, 05:02
Цитата(Sibit @ 12.5.2011,  04:51)
Я думаю, проблема в том, что создается всего один экземпляр класса Worker и при каждом считывании ему присваиваются новые значения. В итоге получается массив ссылок на один объект.


Прочитал, проверил, помогло. Появилось ощущение, что на голове выросли рога.. бараньи )))) 

Снесите тему, мне стыдно ))) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)