import java.util.*; import lombok.val; public class ValWeirdTypes<Z> { private List<Z> fieldList; public void testGenerics() { List<String> list = new ArrayList<String>(); list.add("Hello, World!"); val shouldBeString = list.get(0); val shouldBeListOfString = list; val shouldBeListOfStringToo = Arrays.asList("hello", "world"); val shouldBeString2 = shouldBeListOfString.get(0); } public void testGenericsInference() { val huh = Collections.emptyList(); val huh2 = Collections.<Number>emptyList(); } public void testPrimitives() { val x = 10; val y = 5 + 3L; } public void testAnonymousInnerClass() { val y = new Runnable() { public void run() {} }; } public <T extends Number> void testTypeParams(List<T> param) { val t = param.get(0); val z = fieldList.get(0); val k = param; val y = fieldList; } public void testBounds(List<? extends Number> lower, List<? super Number> upper) { val a = lower.get(0); val b = upper.get(0); val c = lower; val d = upper; List<?> unbound = lower; val e = unbound; } public void testCompound() { val a = new ArrayList<String>(); val b = new Vector<String>(); val c = 1 < System.currentTimeMillis(); val d = c ? a : b; java.util.RandomAccess confirm = c ? a : b; } public void nullType() { val nully = null; } public void testArrays() { val intArray = new int[] {1, 2, 3}; val multiDimArray = new Object[][] {{}}; val copy = intArray; val single = multiDimArray[0]; val singleInt = copy[0]; } }