Чистый код. Создание, анализ и рефакторинг — страница 85 из 94

191      *

192      * @return порядковый номер даты.

193      */

194     public int toSerial() {

195         return this.serial;

196     }

197

198     /**

199      * Возвращает объект java.util.Date, эквивалентный текущей дате.

200      *

201      * @return объект даты.

202      */

203     public Date toDate() {

204         final Calendar calendar = Calendar.getInstance();

205         calendar.set(getYYYY(), getMonth() - 1, getDayOfMonth(), 0, 0, 0);

206         return calendar.getTime();

207     }

208

209     /**

210      * Возвращает год (из действительного диапазона от 1900 до 9999).

211      *

212      * @return год.

213      */

214     public int getYYYY() {

215         return this.year;

216     }

217

218     /**

219      * Возвращает месяц (январь = 1, февраль = 2, март = 3).

220      *

221      * @return месяц года.

222      */

223     public int getMonth() {

224         return this.month;

225     }

226

227     /**

228      * Возвращает день месяца.

229      *

230      * @return день месяца.

231      */

232     public int getDayOfMonth() {

233         return this.day;

234     }

235

236     /**

237      * Возвращает код, представляющий день недели.

238      * 

239      * Коды определяются в классе {@link SerialDate} следующим образом:

240      * SUNDAY, MONDAY, TUESDAY,

241      * WEDNESDAY, THURSDAY, FRIDAY и

242      * SATURDAY.

243      *

244      * @return Код, представляющий день недели.

245      */

246     public int getDayOfWeek() {

247         return (this.serial + 6) % 7 + 1;

248     }

249

250     /**

251      * Проверяет равенство текущей даты с другим произвольным объектом.

252      * 

253      * Метод возвращает true ТОЛЬКО в том случае, если объект является

254      * экземпляром базового класса {@link SerialDate} и представляет тот же

255      * день, что и {@link SpreadsheetDate}.

256      *

257      * @param object  объект для сравнения (допускается null).

258      *

259      * @return Логический признак.

260      */

261     public boolean equals(final Object object) {

262

263         if (object instanceof SerialDate) {

264             final SerialDate s = (SerialDate) object;

265             return (s.toSerial() == this.toSerial());

266         }

267         else {

268             return false;

269         }

270

271     }

272

273     /**

274      * Возвращает хеш-код для экземпляра класса.

275      *

276      * @return хеш-код.

277      */

278     public int hashCode() {

279         return toSerial();

280     }

281

282     /**

283      * Возвращает разность (в днях) между текущей и заданной

284      * 'другой' датой.

285      *

286      * @param other  дата для сравнения.

287      *


Листинг Б.5 (продолжение)

288      * @return разность (в днях) между текущий и заданной

289      *         'другой' датой.

290      */

291     public int compare(final SerialDate other) {

292         return this.serial - other.toSerial();

293     }

294

295     /**

296      * Реализует метод, необходимый для интерфейса Comparable.

297      *

298      * @param other  другой объект (обычно другой объект SerialDate).

299      *

300      * @return отрицательное целое, нуль или положительное целое число,

301      *         если объект меньше, равен или больше заданного объекта.

302      */

303     public int compareTo(final Object other) {

304         return compare((SerialDate) other);

305     }

306

307     /**

308      * Возвращает true, если текущий объект SerialDate представляет ту же дату,

309      * что и заданный объект SerialDate.

310      *

311      * @param other  дата для сравнения.

312      *

313      * @return true, если текущий объект SerialDate представляет

314      *         ту же дату, что и заданный объект SerialDate.

315      */

316     public boolean isOn(final SerialDate other) {

317         return (this.serial == other.toSerial());

318     }

319

320     /**

321      * Возвращает true, если текущий объект SerialDate представляет более раннюю

322      * дату по сравнению с заданным объектом SerialDate.

323      *

324      * @param other  дата для сравнения.

325      *

326      * @return true, если текущий объект SerialDate представляет

327      *         более раннюю дату по сравнению с заданным объектом SerialDate.

328      */