好的,我想我很瞭解泛型,但出於某種原因,我無法理解爲什麼這種方法無效。我有兩個類,或者我應該說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