既存の Comparableインターフェイスを使う。

前回はインターフェイスをObjComparable.javaで作成しました。
実は、汎用的に比較のインターフェイスとして、 次のようなComparableインターフェイスが、始めから java.lang パッケージに用意されているのです。(なお、以下はJDK.1.4以前の古い形式です)

package java.lang;
public interface Comparable {
    int compareTo(Object o);// 実装クラスのオブジェクトのある情報と oを比較
}

これを、Record2のクラスに実装するプログラムは次のようになります。
ObjComparableの代わりにComparableでimplementsします。 (なお、以下はJDK.1.4以前の古い使い方ですが、新しい表現もこの考えが基本になっています。)

public class Record2 implements any.ObjComparable  Comparable
{
	・・・・・・省略・・・・
	
	//java.lang.Comparableインターフェイスのオーバーライドメソッド
	public int compareTo(any.ObjComparable Object obj)
	{
		Record2 rec = (Record2) obj;
		String s = rec.sho;//商品コード文字列

		//Stringの比較メソッドを利用した比較
		return this.sho.compareTo(s);
	}
	
	・・・・・・省略・・・・
}

『Record2のオブジェクトのshoから、rec.shoを引いた値』を戻り値にしています。
つまり、this.shoがrec.shoより大きいなら正の値、等しいならゼロ、 this.shoの方が小さいなら負が戻り値になります。
shoはString型なので、文字列の辞書並びで大小の比較です。
をれを利用する検索メソッドは次のような変更だけです。 これで以前と同じように動作します。(変更箇所は、3箇所です。) なお、java.langのクラスは、importしなくても使えますが、 以前のプログラムと違いを見せるために、以下では省略していません。

←正しく修正してからクリックください。

←わからない場合は、クリック

なお、JDK1.5で上記を翻訳すると、次のような警告がでますが、コンパイルはできて正しく動作します。

D:\java>javac rec\Rec23BinSearch.java
注: rec\Rec23BinSearch.java の操作は、未チェックまたは安全ではありません。
注: 詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。

D:\java>javac -Xlint:unchecked rec\Rec23BinSearch.java
rec\Rec23BinSearch.java:48: 警告: [unchecked] raw 型 java.lang.Comparable の
メンバとしての compareTo(T) への無検査呼び出しです。
                        int val = rec.compareTo(o);//比較
                                               ^
警告 1 個

D:\java>

この警告は、Comparatorインターフェイスの使い方が、JDK1.4 以下の作り方で、 JDK1.5以上では、避けるべき作り方であるためです。
詳細は後述しますが、このような警告を避ける場合は、 次の指定でコンパイルください。

D:\java>javac -source 1.4 Rec23BinSearch.java

D:\java>

-source 1.4の指定で、ソースの書き方が1.4であることを指定しています。