Community
Participate
Working Groups
test117: javac has found error(s) although we're expecting conform result: X.java:1: type parameter X.MX.MMX is not within its bound public class X <T extends X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>{ ^ X.java:4: type parameter X.MX.MMX is not within its bound new X<X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>().new MX<Exception>(); ^ X.java:4: type parameter X.MX.MMX is not within its bound new X<X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>().new MX<Exception>(); ^ X.java:7: type parameter X.MX.MMX is not within its bound void foo(X<X.MX.MMX>.MX<X>.MMX<X> mx) { ^ 4 errors X.java public class X <T extends X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>{ public static void main(String [] args) { new X<X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>().new MX<Exception>(); System.out.println("SUCCESS"); } void foo(X<X.MX.MMX>.MX<X>.MMX<X> mx) { } class MX <MT> { class MMX <MMT> { } } } ======================================== test147: javac displays warning(s) although we're expecting conform result: X.java:7: warning: [unchecked] unchecked call to <T>toArray(T[]) as a member of the raw type java.util.ArrayList list.toArray(tokens); ^ 1 warning X.java import java.util.ArrayList; public class X { public static void main(String[] args) { char[][] tokens = new char[0][]; ArrayList list = new ArrayList(); list.toArray(tokens); System.out.println("SUCCESS"); } } ======================================== test166: javac displays warning(s) although we're expecting conform result: X.java:14: warning: [unchecked] unchecked call to AX(E) as a member of the raw type AX return new AX("SUCCESS"); ^ X.java:14: warning: [unchecked] unchecked conversion found : AX required: AX<T> return new AX("SUCCESS"); ^ 2 warnings X.java public class X { public static void main(String[] args) { AX<X> ax = new AX<X>(new X()); AX<String> a = bar(ax, true); String s = a.get(); System.out.println(s); } public static <T> AX<T> bar(AX<?> a, boolean recurse) { if (recurse) { AX<String> as = bar(a, false); String s = as.get(); } return new AX("SUCCESS"); } } class AX<E> { E e; AX(E e) { this.e = e; } E get() { return this.e; } } ======================================== test167: javac displays warning(s) although we're expecting conform result: X.java:9: warning: [unchecked] unchecked call to AX(E) as a member of the raw type AX return new AX("SUCCESS"); ^ X.java:9: warning: [unchecked] unchecked conversion found : AX required: AX<T,U> return new AX("SUCCESS"); ^ 2 warnings X.java public class X { public static void main(String[] args) { AX<String, Thread> a = bar(); String s = a.get(); System.out.println(s); } public static <T, U> AX<T, U> bar() { return new AX("SUCCESS"); } } class AX<E, F> { E e; AX(E e) { this.e = e; } E get() { return this.e; } } ======================================== test177: javac has found no error/warning although we're expecting negative result: ---------- 1. WARNING in X.java (at line 4) return (T) t; ^^^^^ Unnecessary cast to type T for expression of type T ---------- X.java public class X <T> { T foo(T t) { return (T) t; } } ======================================== test217: javac has found no error/warning although we're expecting negative result: ---------- 1. WARNING in X.java (at line 5) String string = (String) l.get(0); ^^^^^^^^^^^^^^^^^ Unnecessary cast to type String for expression of type String ---------- X.java import java.util.ArrayList; public class X { public static void main(String [] args) { ArrayList<String> l= new ArrayList<String>(); String string = (String) l.get(0); } } ======================================== test232: javac displays warning(s) although we're expecting conform result: X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal("BAD"); ^ 1 warning X.java public class X { static class Container<T>{ private T val; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal("BAD"); } public static void main(String[] args) { Container<Integer> cont=new Container<Integer>(); cont.setVal(new Integer(0)); badMethod(cont); Object someVal = cont.getVal(); // no cast System.out.println(cont.getVal()); // no cast } } ======================================== test233: javac displays warning(s) although we're expecting conform result: X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal(new Long(0)); ^ 1 warning X.java public class X { static class Container<T>{ private T val; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal(new Long(0)); } public static void main(String[] args) { Container<Integer> cont=new Container<Integer>(); cont.setVal(new Integer(0)); badMethod(cont); Number someVal = cont.getVal();// only cast to Number System.out.println("SUCCESS"); } } ======================================== test234: javac displays warning(s) although we're expecting conform result: X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal("BAD"); ^ 1 warning X.java public class X { static class Container<T>{ public T val; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal("BAD"); } public static void main(String[] args) { Container<Integer> cont=new Container<Integer>(); cont.setVal(new Integer(0)); badMethod(cont); Object someVal = cont.val; // no cast System.out.println(cont.val); // no cast } } ======================================== test235: javac displays warning(s) although we're expecting conform result: X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal(new Long(0)); ^ 1 warning X.java public class X { static class Container<T>{ public T val; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal(new Long(0)); } public static void main(String[] args) { Container<Integer> cont=new Container<Integer>(); cont.setVal(new Integer(0)); badMethod(cont); Number someVal = cont.val;// only cast to Number System.out.println("SUCCESS"); } } ======================================== test236: javac displays warning(s) although we're expecting conform result: X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal("BAD"); ^ 1 warning X.java public class X { static class Container<T>{ public T val; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal("BAD"); } public static void main(String[] args) { Container<Integer> cont=new Container<Integer>(); cont.setVal(new Integer(0)); badMethod(cont); Object someVal = (cont).val; // no cast System.out.println((cont).val); // no cast } } ======================================== test237: javac displays warning(s) although we're expecting conform result: X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal(new Long(0)); ^ 1 warning X.java public class X { static class Container<T>{ public T val; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal(new Long(0)); } public static void main(String[] args) { Container<Integer> cont=new Container<Integer>(); cont.setVal(new Integer(0)); badMethod(cont); Number someVal = (cont).val;// only cast to Number System.out.println("SUCCESS"); } } ======================================== test238: javac displays warning(s) although we're expecting conform result: X.java:14: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal("BAD"); ^ 1 warning X.java public class X { static class Container<T>{ public T val; Container<T> next; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal("BAD"); } public static void main(String[] args) { Container<Integer> cont = new Container<Integer>(); cont.next = new Container<Integer>(); cont.next.setVal(new Integer(0)); badMethod(cont.next); Object someVal = cont.next.val; // no cast System.out.println(cont.next.val); // no cast } } ======================================== test239: javac displays warning(s) although we're expecting conform result: X.java:14: warning: [unchecked] unchecked call to setVal(T) as a member of the raw type X.Container x.setVal(new Long(0)); ^ 1 warning X.java public class X { static class Container<T>{ public T val; Container<T> next; public T getVal() { return val; } public void setVal(T val) { this.val = val; } } public static void badMethod(Container<?> param){ Container x=param; x.setVal(new Long(0)); } public static void main(String[] args) { Container<Integer> cont = new Container<Integer>(); cont.next = new Container<Integer>(); cont.next.setVal(new Integer(0)); badMethod(cont.next); Number someVal = cont.next.val;// only cast to Number System.out.println("SUCCESS"); } } ======================================== test242: javac has found no error/warning although we're expecting negative result: ---------- 1. WARNING in X.java (at line 7) final Class<? extends Object> clazz = (Class<? extends Object>) classes.get("test"); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Unnecessary cast to type Class<? extends Object> for expression of type Class ---------- X.java import java.util.HashMap; import java.util.Map; public class X { private static final Map<String, Class> classes = new HashMap<String, Class>(); public static void main(String[] args) throws Exception { classes.put("test", X.class); final Class<? extends Object> clazz = (Class<? extends Object>) classes.get("test"); Object o = clazz.newInstance(); } } ======================================== test298: javac has found error(s) although we're expecting conform result: X.java:5: X is not abstract and does not override abstract method putAll (java.util.Map<? extends java.lang.String,? extends V>) in java.util.Map public class X<V> implements Map<String, V> { ^ 1 error X.java import java.util.Collection; import java.util.Map; import java.util.Set; public class X<V> implements Map<String, V> { private Map<String, V> backingMap; public static void main(String [] args) { System.out.println("SUCCESS"); } public int size() { return 0; } public boolean isEmpty() { return false; } public boolean containsKey(Object key) { return false; } public boolean containsValue(Object value) { return false; } public V get(Object key) { return null; } public V put(String key, V value) { return null; } public V remove(Object key) { return null; } public void clear() { } public Set<String> keySet() { return null; } public Collection<V> values() { return null; } public void putAll(Map<String, ? extends V> t) { } public Set<Map.Entry<String, V>> entrySet() { return this.backingMap.entrySet(); } }
Closing. There are expected differences, and others which changed since then.