2

これらのエラーが発生します。タイプEmailは継承された抽象メソッドComparable.compareTo(Object)を実装する必要がありますタイプEmail.DateComparatorは継承された抽象メソッドComparator.compare(Object、Object)を実装する必要がありますタイプEmail.SubjectComparatorは継承された抽象メソッドComparatorを実装する必要があります.compare(Object、Object)

私は持っていますが

public class Email implements Comparable, Serializable
{
...

    public static class DateComparator implements Comparator
    {
        public int compare(Email email1, Email email2)
        {
            return email1.getTimestamp().compareTo(email2.getTimestamp());
        }
    }

    public static class SubjectComparator implements Comparator
    {
        public int compare(Email email1, Email email2)
        {
            return email1.getSubject().compareTo(email2.getSubject());
        }
    }

}

直し方?

4

3 に答える 3

2

Comparator.compare(Object、Object)メソッドを実装します。引数をEメールにキャストします。Comparator.compare(Email、Email)を実装しました

于 2012-04-27T03:05:12.197 に答える
1

インターフェイスをEmail実装しましたComparable。実装しないでください(さまざまなコンパレータを提供している場合は、完全に合理的な方法です)。または、適切な「自然な順序」でcompareToメソッドをクラスに直接実装してください。Email

于 2012-04-27T03:06:24.817 に答える
0

クラスの署名を次のように変更します。

public class Email implements Comparable<Email>, Serializable

そして、同等の方法を実装します。

public int compareTo(Email otherEmail)

もちろん、これは、そもそもクラスを比較可能にすることを意図していることを前提としています。現在、何らかの理由で、クラスにネストされたコンパレータが定義されています。

于 2012-04-27T03:07:17.930 に答える