私は次のインラインコンパレータを持っています。javaのTypecheckingとGenericsが警告を生成します
Comparable
is a raw type. References to generic typeComparable<T>
should be parameterized
と示唆したように、私が代わりに種類をパラメータとします。次の警告を生成し
private static class SampleSorter implements Comparator<SampleClass>{
public int compare(SampleClass o1, SampleClass o2) {
if (o1 instanceof Comparable) {
return ((Comparable) o1).compareTo(o2);
} else if (o2 instanceof Comparable) {
return -((Comparable) o2).compareTo(o1);
}
return 0;
}
}
if (o1 instanceof Comparable) {
return ((Comparable<SampleClass>) o1).compareTo(o2);
は、その後、私は警告を取得...
Type safety: Unchecked cast from
SampleClass
toComparable<SampleClass>
そして、私は型チェックを行う場合:私は、エラーメッセージのアドバイスに従うならば、
Cannot perform instanceof check against type
Comparable<SampleClass>
. Use the formComparable<?>
instead since generic type information will be erased at runtime
そして再び:
if (o1 instanceof Comparable<SampleClass>) {
return ((Comparable<SampleClass>)o1).compareTo (o2);
を私は次のエラーを取得します:
if (o1 instanceof Comparable<?>) {
return ((Comparable<?>)o1).compareTo (o2);
私はこのエラーを取得する:
The method
compareTo(capture#4-of ?)
in the typeComparable<capture#4-of ?>
is not applicable for the arguments(SampleClass)
今、私はprocedeする方法がわからないが、私は本当にの警告およびエラーフリーのあるコードをprefere。 どのようにして、警告のないコードを作成したいのですか?
をお試しください:O1が同等であるとo2がない場合はどうなりますか?どちらもComparableではないようです。 – oers