import java.lang.invoke.*; import java.util.*; class Main { void foo() throws Exception { MethodHandles.Lookup l = MethodHandles.lookup(); l.findVarHandle(Test.class, "myInt", int.class); l.findVarHandle(Test.class, "myInts", int[].class); l.findVarHandle(Test.class, "myList", List.class); l.findVarHandle(Test.class, "myLists", List[].class); l.findVarHandle(Test.class, "myString", String.class); l.findStaticVarHandle(Test.class, "ourInt", int.class); l.findStaticVarHandle(Test.class, "ourInts", int[].class); l.findStaticVarHandle(Test.class, "ourList", List.class); l.findStaticVarHandle(Test.class, "ourLists", List[].class); l.findStaticVarHandle(Test.class, "ourString", String.class); l.findVarHandle(Test.class, "doesntExist", String.class); l.findStaticVarHandle(Test.class, "doesntExist", String.class); l.findVarHandle(Test.class, "myInt", void.class); l.findVarHandle(Test.class, "myInts", int.class); l.findVarHandle(Test.class, "myString", List.class); l.findStaticVarHandle(Test.class, "ourInt", void.class); l.findStaticVarHandle(Test.class, "ourInts", int.class); l.findStaticVarHandle(Test.class, "ourString", List.class); l.findStaticVarHandle(Test.class, "myString", String.class); l.findVarHandle(Test.class, "ourString", String.class); } } class Test { public int myInt; public String myString; public int[] myInts; public List myList; @SuppressWarnings("unchecked") public List[] myLists; public static int ourInt; public static String ourString; public static int[] ourInts; public static List ourList; @SuppressWarnings("unchecked") public static List[] ourLists; }