public class TypeVars<K, V> { private void test(K key, V value) { String s = "Negative size: " + key + "=" + value; } class MyClass<T> { public T myMethod() { return null; } } public class TypeVarDefaults { class ImplicitUpperBound<T> {} class ExplicitUpperBound<T extends Object> {} void useImplicit() { ImplicitUpperBound<Object> bottom; } void useExplicit() { ExplicitUpperBound<Object> bottom; } void wildCardImplicit() { ImplicitUpperBound<?> bottom; } void wildCardExplicit() { ExplicitUpperBound<?> bottom; } void wildCardUpperBoundImplicit() { ImplicitUpperBound<? extends Object> bottom; } void wildCardUpperBoundExplicit() { ExplicitUpperBound<? extends Object> bottom; } void wildCardLowerImplicit() { ImplicitUpperBound<? super Object> bottom; } void wildCardLowerBoundExplicit() { ExplicitUpperBound<? super Object> bottom; } } }