私は汎用比較ユーティリティを書いていますので、可能な限り型の安全である必要があります。アイデアは、異なるクラスオブジェクトの比較を防止することです。たとえば、これは正常に動作します:静的メソッドのJava型パラメータコンパイル時
UtilityClazz.<String>compare("dd", 1); //OK - compile time error
タイプパラメータを持つユーティリティクラスを呼び出すより洗練された方法がありますか?可能な限りメソッド呼び出しがエレガントにする方法
public static<T> int compare(T value1, T value2) {
if (value1 instanceof Time && value2 instanceof Time) {
return DateComparator.compareTimes((Time) value1, (Time) value2);
} else if (value1 instanceof Date && value2 instanceof Date) {
return DateComparator.compareDates((Date) value1, (Date) value2);
} else if (value1 instanceof Number && value2 instanceof Number) {
return NumberUtility.compare((Number) value1, (Number) value2);
} else {
//....
return 0;
}
}
}
:それは日付を比較し
compare(SomeObject.getDate(), 1); //NOT OK - compiles OK no type is passed
メソッドのコードをint型になるので、以下これがOKではないでしょうか?あなたはそれが簡単にメソッドオーバーロードではなく、ジェネリックで行うことができます
この回答は役に立つかもしれません:http://stackoverflow.com/questions/16069106/how-to-compare-two-java-objects –
最初にそれを削除してください** ** _UtilityClazzから。 compare( "dd"、1); _ –
emotionlessbananas
https://github.com/jeevatkm/generic-repo/blob/master/genericComparator/src/main/java/com/myjeeva/comparator/GenericComparator.java –