// Test case for issue #238: https://github.com/typetools/checker-framework/issues/238 import java.util.ArrayList; import java.util.List; class TestInfer1 { <T> T getValue(List<T> l) { return l.get(0); } void bar(Object o) {} void foo() { List<?> ls = new ArrayList<>(); bar(getValue(ls)); } } class TestInfer2 { <T extends String> T getValue(List<T> l) { return l.get(0); } void bar(String o) {} void foo() { List<? extends String> ls = new ArrayList<>(); bar(getValue(ls)); } }