次の (この形式では明らかに役に立たない) 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();
2行目にコンパイルエラー「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;
これは明らかにひどいものです (関連する警告が抑制されていても)。