0

私にはContactというクラスがあります。これはPersonalContactとBusinessContactという名前のクラスのスーパークラスです。

私のクラスには、サブクラスにそれを実装するように指示することになっている1つの抽象メソッドがあります。方法は

public abstract Set<T> getEventsWithinPeriod(DateTime start, DateTime end);

Tは、各サブクラスのさまざまなタイプのイベントと交換する必要があります。PersonalContactsには誕生日があり、BusinessContactsには会議があります。問題は、と言うエラーが発生することですがT cannot be resolved to a type、それがジェネリックスの要点ではありませんか?

クラスヘッダーにも入れてみました

public abstract class Contact<T> implements Comparable<Contact>{

しかし、コンパイラは私に警告を出します

Contact is a raw type. References to generic type Contact<T> should be parameterized.

これを修正するにはどうすればよいですか?

4

2 に答える 2

4

正式な型パラメータを導入する必要があります。

public abstract <T> Set<T> getEventsWithinPeriod(Class<T> type, DateTime start, DateTime end);

パラメータがなくても実際に機能しますClass<T> type。しかし、メソッド内でインスタンス化することを計画しているようですT(型消去のためにインスタンス化できません)。そのため、パラメータは、実行時に実際のタイプを反射的にインスタンス化するのに役立ちます。

于 2012-11-02T04:51:33.887 に答える
1

getEventsWithinPeriod メソッドではなく、T をサブクラスに結び付けたいので、T を contact のパラメーターとして宣言します。

public abstract class Contact<T>
{
    public abstract Set<T> getEventsWithinPeriod();
}

class DOB
{
}
class BMeeting
{
}

class PersonalContact extends Contact<DOB>
{
    @Override
    public Set<DOB> getEventsWithinPeriod() 
    {
        // TODO Auto-generated method stub
        return null;
    }
}


class BusinessContact extends Contact<BMeeting>
{
    @Override
    public Set<BMeeting> getEventsWithinPeriod() 
    {
        return null;
    }
}
于 2012-11-02T05:00:50.403 に答える