範囲を扱うクラス
昨日、日付の範囲(form-to)を扱うコードを追ってて、GenericsなRange
今のところ(いまだに)Java SE 1.4なんだけど、そのうちJava SE 6向けに全面書き換えしたいと思っている。
で、Range
Declarative programming: a Range type for Java | brain driven development
http://weblogs.java.net/blog/mkarg/archive/2011/01/01/generic-range-class
多少アレンジしたのが以下。(getterは略)
public class Range<T extends Comparable<T>>{ private final T _from; private final T _to; public Range(final T from, final T to){ _from = from; _to = to; } public T getFrom() { return _from; } public T getTo() { return _to; } public boolean contains(final T value) { if (null == value) return false; return from.compareTo( value ) <= 0 && value.compareTo(to) <= 0; } }
この実装だと、いわゆる「両端*1」。
「片端*2」をどうするかとか考えている。
数学の教科書では●*3と○*4で書かれていたかな。
F T ●ーーー● // f<=v<=t ○ーーー● // f <v<=t ●ーーー○ // f<=v< t ○ーーー○ // f< v< t
- containsのバリエーション的なメソッドを用意する
- 両端と片端をcontainsの引数に渡す
- boolean でフラグ
- enumを用意する
- 両端と片端を扱うクラスを別クラス(親子関係?)にする
どれもいまいち感が…