我有一个名为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.
我该如何解决这个问题?
答案 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;
}
}