我有以下的(這種形式顯然是無用)的Java類:Java類型捕獲的內部類
public class EntrySet<T> {
public static class Entry<T> {
T obj;
}
private final Set<Entry<T>> set;
public EntrySet() {
this.set = Sets.newHashSet();
}
public Set<Entry<T>> getEntries() {
return set;
}
}
鑑於這個類,下面不編譯:
EntrySet<?> entrySet = new EntrySet<SomeClass>();
Set<EntrySet.Entry<?>> entries = entrySet.getEntries();
第二行編譯錯誤「無法從Set<EntrySet.Entry<capture#1-of ?>>
轉換爲Set<EntrySet.Entry<?>>
」。我無法找到消除此錯誤的方法,即使在投射或使用助手功能時也是如此。
究竟什麼是這裏的問題,是有沒有辦法得到一個乾淨的編譯?
我能做到的最好的是:
EntrySet<?> entrySet = new EntrySet<SomeClass>();
Set<?> tmp = entrySet.getEntries();
Set<EntrySet.Entry<?>> entries = (Set<EntrySet.Entry<?>>) tmp;
這顯然是可怕的(即使有相關的警告抑制)。
您是否嘗試過EntrySet entrySet = new EntrySet (); ? –
Jerome
這只是一些虛擬代碼,以確保問題清楚。這當然會起作用,但就我而言,我所擁有的只是一個'EntrySet >'。 – Carl