私はジェネリッククラスを持っています:
_public class ListObject<T>
{
// fields
protected T _Value = null;
// ..
}
_
今、私は次のようなことをしたいです:
_ListObject<MyClass> foo = new ListObject<MyClass>();
ListObject<MyClass> foo2 = new ListObject<MyClass>();
foo.compareTo(foo2);
_
質問:
ジェネリックT
に再定義してcompareTo()
メソッドを定義するにはどうすればよいですか?
ジェネリックT
に制約を実装して、T
が特定のインターフェース(存在する場合はComparable
)を実装するように指示する必要があると思います。
誰かが小さなコードサンプルを私に提供できますか?
こちらのディスカッションもお読みください: Javaでのジェネリックとソート
短い答え、あなたが得ることができる最高のものは:
class ListObject<T extends Comparable<? super T>> {
...
}
しかし、使用するだけの理由もあります。
class ListObject<T extends Comparable> {
...
}
これは、compareToメソッドで何を実行するかによって異なります。他のListObject<T>
値を取るようにcompareToメソッドを定義することは、以下によって実行されます
public class ListObject<T> {
public int compareTo(ListObject<T> other) {
...
}
}
ただし、そのパラメーターで実際にメソッドを呼び出す場合は、T
値に関する詳細情報を提供するために、いくつかの制約を追加する必要があります。
class ListObject<T extends Comparable<T>> {
...
}
public class ListObject<T extends U>
をお試しください。 T
を実装する(またはU
から派生する)U
sのみが、許可される置換になります。