[解決済み] ジェネリッククラスによるComparableの実装
2022-02-15 18:40:55
質問
汎用的なComparableインタフェースを実装したクラスを定義したい。クラス内に汎用型要素
T
. このインターフェースを実装するために、私は比較を
T
. 以下は私のコードです。
public class Item<T extends Comparable<T>> implements Comparable<Item> {
private int s;
private T t;
public T getT() {
return t;
}
@Override
public int compareTo(Item o) {
return getT().compareTo(o.getT());
}
}
これをコンパイルしようとすると、次のようなエラー情報が表示されます。
Item.java:11: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;
return getT().compareTo(o.getT());
^
required: T#1
found: Comparable
reason: actual argument Comparable cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class Item
T#2 extends Object declared in interface Comparable
1 error
どなたか原因と解決方法を教えてください。
どのように解決するのですか?
Item
(型引数なし)は
生タイプ
ということです。
-
任意の種類の
Item
からItem.compareTo
. 例えば、このようにコンパイルされます。new Item<String>().compareTo(new Item<Integer>())
-
メソッド
o.getT()
は以下を返します。Comparable
の代わりにT
となり、コンパイルエラーとなります。1.の例では、(1)と同じように、(2)のように
Item<Integer>
からItem.compareTo
を渡すと、誤ってInteger
をString.compareTo
. このコンパイルエラーによって、そのようなコードを書くことができなくなります。
生タイプを削除すればいいだけだと思うのですが。
public class Item<T extends Comparable<T>>
implements Comparable<Item<T>> {
...
@Override
public int compareTo(Item<T> o) {
return getT().compareTo(o.getT());
}
}
関連
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】Nullable型をジェネリックパラメータにすることは可能か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み】Javaの未処理例外について
-
[解決済み】CreateProcess error=2, The system cannot find file specified.