Custom Iterable, Issue with standard Interface?
Hi,
I have a similar situation as demonstrated below. I cannot find a
proper solution to make method iterator() work properly. It works with
the custom interface Iterable2 (see below). I tried several
alternatives I could think of but to no avail (see comments in code).
Any other ideas? Or am I running into a limitation of Iterable?
Research did not turn up much useful information for this situation.
Thanks for any feedback!
Kind regards
robert
package generics;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
// does not work because: The type WrappedTest cannot extend or
implement Iterable<? extends Map.Entry<K,V>>. A supertype may not
specify any wildcard
// public class WrappedTest<K, V> implements Iterable<? extends
Map.Entry<K, V>> {
public class WrappedTest<K, V> implements Iterable<Map.Entry<K, V>>,
Iterable2<Map.Entry<K, V>> {
private static class En<Ke, Va> implements Map.Entry<Ke, Va> {
public Ke getKey() {
return null;
}
public Va getValue() {
return null;
}
public Va setValue( Va value ) {
return null;
}
}
private Set<En<K, V>> set = new HashSet<En<K, V>>();
// works but not usable:
// private Set<Map.Entry<K, V>> set = new HashSet<Map.Entry<K,
V>>();
public Iterator<Map.Entry<K, V>> iterator() {
// error in this line:
return set.iterator();
}
// this is ok
public Iterator<? extends Entry<K, V>> iter() {
return set.iterator();
}
// works but inheritance from Iterable<Map.Entry<K, V>> fails:
// public Iterator<? extends Map.Entry<K, V>> iterator() {
// return set.iterator();
// }
}
package generics;
import java.util.Iterator;
public interface Iterable2<T> {
public Iterator<? extends T> iter();
}