好的,我想我很了解泛型,但出于某种原因,我无法理解为什么这种方法无效。我有两个类,或者我应该说Google有两个类(我试图实现他们的Contacts API)。他们有一个ContactEntry类(以下略):Java泛型问题
package com.google.gdata.data.contacts;
public class ContactEntry extends BasePersonEntry<ContactEntry> {
public ContactEntry() {
super();
getCategories().add(CATEGORY);
}
public ContactEntry(BaseEntry<?> sourceEntry) {
super(sourceEntry);
}
}
我离开的一个或两个方法,但没有什么重要的是,它真的只是它的父类BasePersonEntry的实现具有大部分是涉及一个人的重要的东西下面进入缩写代码:
package com.google.gdata.data.contacts;
public abstract class BasePersonEntry<E extends BasePersonEntry> extends
BaseEntry<E> {
public BasePersonEntry() {
super();
}
public BasePersonEntry(BaseEntry<?> sourceEntry) {
super(sourceEntry);
}
public List<CalendarLink> getCalendarLinks() {
return getRepeatingExtension(CalendarLink.class);
}
public void addCalendarLink(CalendarLink calendarLink) {
getCalendarLinks().add(calendarLink);
}
public boolean hasCalendarLinks() {
return hasRepeatingExtension(CalendarLink.class);
}
}
现在...我不是很明白的是,如果我这样做了以下内容:
public void method1(StringBuilder sb, ContactEntry contact) {
if (contact.hasCalendarLinks()) {
for (CalendarLink calendarLink : contact.getCalendarLinks()) {
...
}
}
}
一切工作网络东北。它能够解释getCalendarLinks返回一个CalendarLink类型的列表。但是,如果我想抽象这种方法,并有我的方法使用BasePersonEntry,如下所示:
public void method1(StringBuilder sb, BasePersonEntry entry) {
if (entry.hasCalendarLinks()) {
for (CalendarLink calendarLink : entry.getCalendarLinks()) {
...
}
}
}
我得到一个编译错误:
incompatible types
found : java.lang.Object
required: com.google.gdata.data.contacts.CalendarLink
对于我的生活我做不到理解为什么?对getCalendarLinks的调用是EXACT相同的方法(通过继承),它返回EXACT相同的东西。也许它与BasePersonEntry是一个抽象类有关?
如果有人可以对此有所了解,我会非常感激。如果有帮助,您可以在这里找到由Google托管的源代码的完整版本:Link To Google Library Download。我正在尝试使用gdata-java库的1.41.3版本。
getRepeatingExtension是做什么的?它取决于E吗? – samitgaur 2010-07-13 20:28:37