私は、すべてのクラスがIdObjectというインターフェースを実装しています(getId()メソッドを指定しています)。さらに、それらはすべて、タイプパラメータとしてそれ自体を比較<と実装しているため、それらはすべて自分自身に匹敵します。Java:それらに複数の一般的な "制約"がある変数を宣言する
私がしたいのは、そのようなオブジェクトのリストを宣言し、それを記入し、ソートしてgetId()を呼び出します。だから私のコードは次のようになります。
List<? extends IdObject & Comparable<?>> objectList = null;
if (foo) {
objectList = new ArrayList<TypeA>();
...
} else if (bar) {
objectList = new ArrayList<TypeB>();
...
}
if (objectList != null) {
Collections.sort(objectList);
for (IdObject o : objectList) {
System.out.println(o.getId());
}
}
基本的に私の問題は、最初の行にある - 私は私はIDを印刷できることを確認するために最初のものを必要とするので、私はタイプ用の2つの「制約」を指定したいですループと2番目のリストでCollections.sort()を使用できることを確認してください。
最初の行はコンパイルされません。
タイプパラメータなしでジェネリックタイプを指定せず、チェックされていない操作を使用しないで、この動作を行う方法はありますか?私はインターネット上でこれの例を見つけることもできませんでした。
ごあいさつ
警告:CompIdObjectは総称として宣言されていません。 – Nicolas