我的抽象类中有一个泛型方法。我如何使其工作?

时间:2012-11-02 04:48:17

标签: java generics

我有一个名为Contact的类,它是名为PersonalContact和BusinessContact的类的超类。

我的类中有一个抽象方法,它应该告诉子类实现它。方法是

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.

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

它应该引入一个正式的类型参数:

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

即使没有参数Class<T> type,它也会正常工作。但看起来你打算在方法中实例化T(由于类型擦除而无法做到)。因此,参数可以帮助在运行时反射实例化实际类型。

答案 1 :(得分:1)

由于您希望将T与子类而不是getEventsWithinPeriod方法联系起来,因此将T声明为联系人的参数。

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;
    }
}