汎用リストまたはパラメーター化されたリストでComparableインターフェースを使用すると、チェックされていないキャスト警告が表示されます。ObjectListを使用して比較を行うことはできますが、汎用リストを使用して比較することはできません。これが私の開発です。最初にObjectListを使用し、次に汎用リストを使用します。
これが私のListNodeクラス定義のスニペットです:
public class ListNode {
private Object info;
private ListNode next;
そして私のObjectListクラス定義のスニペット:
public class ObjectList {
private ListNode list;
と私の比較可能なインターフェース:
public interface Comparable {
public int compareTo(Object o);
}
ObjectListクラスに、ObjectパラメーターをListNode内のObjectと問題なく比較するメソッドがあります。比較コードは次のとおりです。
if (((Comparable)o).compareTo(p.getInfo()) == 0)
私は今、ジェネリックListクラスを作成し、同様の比較を行おうとしています。これが私の一般的なListNodeクラス定義のスニペットです:
public class ListNode<Type> {
private Type info;
private ListNode<Type> next;
ジェネリックリストクラス定義のスニペット:
public class List<Type> {
private ListNode<Type> list;
と私の一般的な比較可能なインターフェイス:
public interface Comparable<Type> {
public int compareTo(Type t);
}
ObjectListクラスと同じ比較を試みると、ジェネリックListクラスから以下のチェックされていないキャスト警告が表示されます。
List.java:239:警告:[チェックされていない]チェックされていないキャストが見つかりました:必要なタイプ:比較可能
if (((Comparable<Type>)t).compareTo(p.getInfo()) == 0)
何かご意見は?
簡略化したコードは次のとおりです。
public class List<Type> {
public class ListNode<Type> {
private Type info;
private ListNode<Type> next;
public ListNode() {
info = null;
next = null;
}
}
private ListNode<Type> list;
public List() {
list = null;
}
public boolean contains(Type t) {
ListNode<Type> p = list;
while (p != null && (((Comparable<Type>)t).compareTo(p.info) != 0))
p = p.next;
return p != null;
}
}
public interface Comparable<Type> {
public int compareTo(Type t);
}
リストクラスへの制限付きパラメーターの追加:
public class List<Type extends Comparable<Type>> {
警告の問題を解決します。ただし、Stringオブジェクトのリストを作成すると、次のエラーが発生します。
タイプパラメータjava.lang.stringがその範囲内にありません