interface I { String foo(String s); } interface J { int length(); } interface K { int length(String s); } interface L { String foo(); } interface M { int capacity(java.util.List<String> ls); } interface N { java.util.List<String> newList(); } interface O { int [] vector(int x); } public class X { public void main(String[] args) { I i = System :: getProperty; J j = "abc"::length; K k = String :: < String , Integer > length; L l = super :: toString; M m = java.util.List < String > ::< X> size; N n = java.util.ArrayList< String >::new; O o = int[] :: new; } }