2016-05-30 9 views
-2

私はGenericというクラスを持っています。私はmatches()というブールメソッドを作成するように割り当てられています。このブールメソッドは、別のGenericをパラメータとして受け取り、2つの格納された値が現在のGenericにある場合はtrueを返します。値の順序は重要ではありません。(初心者)Java generics:Comparable

public class Generic<T extends Comparable<? super T>> { 
    ... 
    public boolean matches(Class Generic){ 
    return this.valueA = that.valueA && this.valueB = that.valueB): } 
    ... 
} 

私はクラスがvalueAvalueBに複数の値を保存し、他の1からthis.valueAを区別することができる方法を理解するためにscrabblingています。私は、より多くの情報のためのリフレクションと呼ばれるコンセプトを参照すべきでしょうか?

+0

comparableを使用したくない場合は、それを使用しないでください:)あなたは同じ種類の別のオブジェクトをとるmatches()という名前の独自の関数を作成しています。そして値を比較することはまっすぐであるべきです。オブジェクトにパラメータとしてaとbがある場合、それらのgetterを記述し、それらの関数を呼び出して値を比較します。 –

+2

なぜ 'matches'メソッドは' Generic'ではなく 'Generic'ではなく' Object'を引数としてとります( 'instanceof'チェックをしているので)。 – Jesper

+0

ありがとう、@ SunilChakravarthy。私は初心者のようなコンセプトのコンセプトの周りに頭を巻くのに問題があります。クラスは 'storeValueA'と' storeValueB'にそれぞれ複数の値を格納することができますか? – wbxyqeuv

答えて

2

型パラメータTの目的は、そのタイプのものであるとフィールドvalueAvalueBのためである、とmatches()は(T extends Comparableので)彼らはComparableであるという事実を使用する必要があることた場合、これはどのようにある:

public class Generic<T extends Comparable<? super T>> { 
    private T valueA; 
    private T valueB; 
    public boolean matches(Generic<T> that){ 
     return (this.valueA.compareTo(that.valueA) == 0 && 
       this.valueB.compareTo(that.valueB) == 0); 
    } 
} 

:あなたは本当にすべてで Comparableを必要としない、参照型はに等しい Comparableと一致していることを強制することを想定もちろん

public class Generic<T> { 
    private T valueA; 
    private T valueB; 
    public boolean matches(Generic<T> that){ 
     return (this.valueA.equals(that.valueA) && 
       this.valueB.equals(that.valueB)); 
    } 
} 

valueAvalueBの両方のnull値を処理できないことに注意してください。

+0

ありがとう、@アンドレアス。これで多くの混乱が解消されました。 – wbxyqeuv