>158 */
>159 public Object clone() throws CloneNotSupportedException {
>160 final RelativeDayOfWeekRule duplicate
>161 = (RelativeDayOfWeekRule) super.clone();
>162 duplicate.subrule = (AnnualDateRule) duplicate.getSubrule().clone();
>163 return duplicate;
>164 }
>165
>166 /**
>167 * Возвращает дату, сгенерированную текущим правилом для заданного года.
>168 *
>169 * @param year год (1900 <= год <= 9999).
>170 *
>171 * @return дата, сгенерированная правилом для заданного года
>172 * (допускается null
).
>173 */
>174 public SerialDate getDate(final int year) {
>175
>176 // Проверить аргумент...
>177 if ((year < SerialDate.MINIMUM_YEAR_SUPPORTED)
>178 || (year > SerialDate.MAXIMUM_YEAR_SUPPORTED)) {
>179 throw new IllegalArgumentException(
>180 "RelativeDayOfWeekRule.getDate(): year outside valid range.");
>181 }
>182
>183 // Вычислить дату...
>184 SerialDate result = null;
>185 final SerialDate base = this.subrule.getDate(year);
>186
>187 if (base != null) {
>188 switch (this.relative) {
>189 case(SerialDate.PRECEDING):
>190 result = SerialDate.getPreviousDayOfWeek(this.dayOfWeek,
>191 base);
>192 break;
Листинг Б.6 (продолжение)
>193 case(SerialDate.NEAREST):
>194 result = SerialDate.getNearestDayOfWeek(this.dayOfWeek,
>195 base);
>196 break;
>197 case(SerialDate.FOLLOWING):
>198 result = SerialDate.getFollowingDayOfWeek(this.dayOfWeek,
>199 base);
>200 break;
>201 default:
>202 break;
>203 }
>204 }
>205 return result;
>206
>207 }
>208
>209 }
Листинг Б.7. DayDate.java (окончательная версия)
> 1 /* ========================================================================
> 2 * JCommon : библиотека классов общего назначения для платформы Java(tm)
> 3 * ========================================================================
> 4 *
> 5 * (C) Copyright 2000–2005, by Object Refinery Limited and Contributors.
> ...
> 36 */
> 37 package org.jfree.date;
> 38
> 39 import java.io.Serializable;
> 40 import java.util.*;
> 41
> 42 /**
> 43 * Абстрактный класс, представляющий неизменяемые даты с точностью
> 44 * до одного дня. Реализация отображает дату на целое число, представляющее