Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конструктор преобразования, возможно ли прервать выполнение констр-а 
:(
    Опции темы
SectoR
Дата 27.10.2010, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



Конструктор преобразования — конструктор, принимающий один аргумент (эти конструкторы могут вызываться автоматически для преобразования значений других типов в объекты данного класса).

У меня имеется класс PrivateSectorPersons, а также метод, перенесенный из Main-класса.

Код

      public PrivateSectorPersons(Cell[] row)
          {
              if(row.length == 0) return null;
       
              int c = 0;
              for(int i=0; i<row.length; i++)
              {
                  if(row[i].getType()==CellType.EMPTY) c++;
              }    
              if(c==row.length) return null; // если в строке все значения пустые
              //System.out.println(c+" "+row.length);
       
       
       
              // Собственно парсим строку, записывая значения ячеек в промежуточные переменные:
       
              // Житель частного сектора:
              // код ЛС
              if (row[1].getType() == CellType.NUMBER) {
                  NumberCell cell = (NumberCell) row[1];
                  ls_code = (int)cell.getValue();
              }
              else return null;
              //System.out.println(ls_code);
       
              // флаг ответственности
              if (row[2].getType() == CellType.LABEL) {
                  LabelCell cell = (LabelCell) row[2];
                  otv = (cell.getString().toCharArray())[0];
              }
              else otv = ' ';
              //System.out.println(otv);
       
              // фамилия
              if (row[3].getType() == CellType.LABEL) {
                LabelCell cell = (LabelCell) row[3];
                surname = cell.getString();
              }
              else return null;
              //System.out.println(surname);
       
              // имя
              if (row[4].getType() == CellType.LABEL) {
                LabelCell cell = (LabelCell) row[4];
                name = cell.getString();
              }
              else return null;
              //System.out.println(name);
       
              // отчество
              if (row[5].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[5];
                secondname = cell.getString();
              }
              else return null;
              //System.out.println(secondname);
       
              // дата рождения
              SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
              if (row[6].getType() == CellType.DATE)
              {
                DateCell cell = (DateCell) row[6];
                birthday = df.format( cell.getDate() );
              }
              else return null;
              //System.out.println(birthday);
       
              // пол
              if (row[14].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[14];
                sex = (cell.getString().toCharArray())[0];
              }
              else return null;
              //System.out.println(sex);
       
              // Документ:
              // тип документа
              if (row[20].getType() == CellType.LABEL)
              {
                LabelCell lc = (LabelCell) row[20];
                doc_type = lc.getString();
              }
              else doc_type = "";
              //System.out.println(doc_type);
       
              // серия
              if (row[21].getType() == CellType.LABEL)
              {
                LabelCell lc = (LabelCell) row[21];
                series = lc.getString();
              }
              else series  = "";
              //System.out.println(series);
       
              // номер
              if (row[22].getType() == CellType.NUMBER)
              {
                NumberCell cell = (NumberCell) row[22];
                number = (int)cell.getValue();
              }
              else return null;
              //System.out.println(number);
       
              // место выдачи документа
              if (row[23].getType() == CellType.LABEL)
              {
                LabelCell lc = (LabelCell) row[23];
                issue_place = lc.getString();
              }
              else issue_place = "";
              //System.out.println(issue_place);
       
              // кем выдан
              if (row[24].getType() == CellType.LABEL)
              {
                LabelCell lc = (LabelCell) row[24];
                issued = lc.getString();
              }
              else issued = "";
              //System.out.println(issued);
       
              // дата выдачи
              df = new SimpleDateFormat("dd.MM.yyyy");
              if (row[6].getType() == CellType.DATE)
              {
                DateCell cell = (DateCell) row[6];
                issue_date = df.format( cell.getDate() );
              }
              else return null;
              //System.out.println(issue_date);
       
          } // PrivateSectorPersons(Cell[] row)


Из него я хочу сделать конструктор преобразования.
Но ведь в конструкторе нельзя использовать return, в отличие от обычных методов.
Можно ли каким то образом прерывать выполнение конструткора (конструирование объекта) при проверке условий?!?! 
PM   Вверх
AlexeyVorotnikov
Дата 27.10.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



С чего это вы решили, что в конструкторе нельзя использовать return? В конструкторе можно использовать return.

Это сообщение отредактировал(а) AlexeyVorotnikov - 27.10.2010, 09:40


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
mgarin
Дата 27.10.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Можно использовать пустой return:
Код
public PrivateSectorPersons(Cell[] row)
          {
              ...
              if (someBoolean) return;
              ...
          }


Точно также такой "return;" можно использовать для прерывания void методов

А return с возвратом значения естественно нельзя использовать, 
ведь конструктор никуда не возвращает каких либо значений

P.S. И еще пара "уточнений":
Цитата
Конструктор преобразования — конструктор, принимающий один аргумент

Надеюсь это вы только о вашем конструкторе?) 
А то вообще конструктор может быть и без агрументов или хоть с десятком таковых.

Цитата
Из него я хочу сделать конструктор преобразования.

Зачем такое извращение впринципе? Вам в данном случае не подойдет обычный static метод?
Все конечно зависит от ваших целей

Это сообщение отредактировал(а) mgarin - 27.10.2010, 10:34
PM MAIL WWW ICQ   Вверх
Kircul
Дата 27.10.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Цитата(SectoR @  27.10.2010,  07:36 Найти цитируемый пост)
Можно ли каким то образом прерывать выполнение конструткора (конструирование объекта) при проверке условий?!?!  

Бросить исключение.
PM   Вверх
SectoR
Дата 27.10.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



Цитата(mgarin @  27.10.2010,  10:27 Найти цитируемый пост)
Зачем такое извращение впринципе? Вам в данном случае не подойдет обычный static метод?
Все конечно зависит от ваших целей


На самом деле у меня сначало был отдельный метод parseRow в Main классе...
довольно громоздкий - как и практически все парсеры. Вот я и подумал перенести логику в класс PrivateSectorPersons.

Даже и не знаю оправдано такое решение?

Мне оно показалось удобным. В обобщенном случае мой алгоритм таков (ключевые кусочки из main-метод):
Код

...
// открываем excel-файл:
workbook = Workbook.getWorkbook(new File(xlsfilename));  
...
// открываем лист в excel-файле:
sheet = workbook.getSheet(n);
...
// в цикле получаем строки листа:
row = sheet.getRow(k);
...
// создаем объект
pers = new PrivateSectorPersons(row);  // вызов конструктора преобразования
...
// кладем его в коллекцию
persons.add(pers);
...
workbook.close();
...


Это сообщение отредактировал(а) SectoR - 27.10.2010, 15:00
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.