我有以下(在这种形式下显然没用)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();
第二行有编译错误“cannot convert from Set<EntrySet.Entry<capture#1-of ?>>
to Set<EntrySet.Entry<?>>
”。即使使用强制转换或使用辅助函数,我也找不到消除此错误的方法。
这里到底是什么问题,有没有办法获得干净的编译?
我能做的最好的是:
EntrySet<?> entrySet = new EntrySet<SomeClass>();
Set<?> tmp = entrySet.getEntries();
Set<EntrySet.Entry<?>> entries = (Set<EntrySet.Entry<?>>) tmp;
这显然很糟糕(即使有相关的警告抑制)。