2011-12-31 10 views
4

ジェネリックメンバーを比較できるjavaクラスにジェネリッククラスを書くのが難しいです。ジェネリッククラスのジェネリックメンバーを比較する方法

以下は私が書いたコードスニペットですが、コンパイルエラーです。

public class TestClass <E extends Comparable<E>>{ 
private E data1; 
private E data2; 

    public void fun(){ 
     if(data1 > data2){ 

     } 
    } 

} 

compare( '>')操作が無効であると言ってエラーが表示されます。 私の理解によれば、私がComparableを拡張しているのであれば、私はこの操作を行うことができます。

答えて

6

JavaはC++ではありません。演算子のオーバーロードはありません。 インターフェイスで提供される.compareTo()を使用する必要があります。例:

if(data1.compareTo(data2) > 0){ 
+0

ありがとうziesemer。 1つの疑い。 'E extends Integer'を' data1> data2'よりもうまくいけば 'E extends Comparable 'の代わりに 'この場合、整数に適用できるので、 '>'演算を許可していると仮定しています。比較可能なすべてのオブジェクトで '> '操作が許可されているので、同じコンセプトを適用するべきではありません。「Comparable 」です。 – shantanu

+0

@ shantanu - これだけです - '<' and '>'演算子はComparableやその他の非プリミティブ型(int、shortなど)では使用できません。 'Integer'(非プリミティブ)で動作する唯一の理由は、Java 5の自動アンボクシングのためです。まず、Integerをintに変換して比較を行います。 (そうでなければ、上記と同様に 'Integer.compareTo(Integer anotherInteger)'を使う必要があります。) – ziesemer

+0

ありがとう、いい説明があります。 – shantanu

関連する問題