0

我有一个名为 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.

我该如何解决?

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

由于您想将 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;
    }
}
于 2012-11-02T05:00:50.403 回答