2016-06-19 12 views
-4

.\StartComparator.java:3: error: StartComparator is not abstract and does not override abstract method compare(Object,Object) in ComparatorJavaのジェネリックとコンパレータ

.\StartComparator.java:5: error: method does not override or implement a method from a supertype @Override

import java.util.Comparator; 

public class StartComparator<T> implements Comparator 
{ 
    @Override 
    public int compare(TimeLineChunk<T> o1, TimeLineChunk<T> o2) { 
     return o1.Start.compareTo(o2.Start); 
    } 
} 

私はそれがこれらのエラーを投げている理由は、彼らは互いに矛盾するように見える正確にわかりません。

+1

'TimeLineChunk 'は、オブジェクトのスーパータイプではありません。 'Object'が必要です。だからあなたは実際に 'Comparator'(1)を実装していません。代わりに、実装したり拡張したりして、存在しないものを上書きしています。 (2)。 'Comparator >'をお探しですか? – Caramiriel

+1

[生のタイプとは何ですか?なぜ使用しないのですか?](0120-18753) – Tom

+0

すべての答えをありがとう、彼らは私の問題を解決しました。なぜ私は質問が-4にあるのかよく分かりません。私は明確に述べられている問題を抱えていました。エラーメッセージが含まれていました。関連するコードを提供しました。他に何ができましたか?私はJavaのジェネリックスの初心者であり、自分では問題を見つけられませんでした。 – Alexander

答えて

3

苦情は関連しています。 2番目の方法は、メソッドがメソッドをオーバーライドしないことを示しています。したがって、最初の苦情である比較を(正しく)上書きすることはできません。

ほとんどの場合、適切な型パラメータimplements Comparable<TimeLineChunk<T>>を使用してimplementsメソッドを宣言する必要があります。あなたのコンパイラは、Comparableの生の型の使用について警告していたはずです。

1

比較メソッドをオーバーライドしていません。オーバーロードされたバージョンです。引数の型は、TimeLineChunkではなく、 "Object"でなければなりません。

+0

まず、適切にパラメータを設定して、生の 'Comparable'型を最初に使用しないほうがよいでしょう。 – BeeOnRope

関連する問題