Community
Participate
Working Groups
Often it's easy to get the <? super T> and <? extends T> mixed up. A useful quick fix would suggest the other when the first is obviously wrong but the other would probably resolve. e.g. % cat Test.java import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * @author <a href="mailto:foo@bar.com">Foo Bar</a> */ public final class Test { /** * @param <T> * @param from * @param clazz to force to T * @return as an array */ // public static <T> T[] createFrom(final Collection<? extends T> from, final Class<T> clazz) // what I need public static <T> T[] createFrom(final Collection<? super T> from, final Class<T> clazz) // what I had { assert from != null; assert clazz != null; return null; } /** * @param <T> * @param from * @param val to force to T * @return as an array */ // public static <T> T[] createFromVal(final Collection<? extends T> from, final T val) // what I need public static <T> T[] createFromVal(final Collection<? super T> from, final T val) // what I had { assert from != null; assert val != null; return null; } /** Test it. */ public static void test() { final Object type = new Object(); final List<Double> foo = new ArrayList<Double>(); final Collection<Double> bar = new ArrayList<Double>(); final Number[] fooed = Test.createFrom(foo, Number.class); final Number[] barred = Test.createFrom(bar, Number.class); final Object[] gooed = Test.createFrom(bar, Object.class); assert barred != null; assert fooed != null; assert gooed != null; final Object[] foo2 = Test.createFromVal(foo, type); } }