Problem with Method Reference

Howard Lovatt howard.lovatt at gmail.com
Sun Aug 22 18:03:05 PDT 2010


Hi,

I think the following should not compile (because
String.CASE_INSENSITIVE_ORDER isn't a class but an object):

  final String s1 = "Amy";
  final String s2 = "Bec";
  final String[] people = new String[] { s2, s1 };
  Arrays.sort( people, String.CASE_INSENSITIVE_ORDER#compare( String,
String ) );

but it does. However when run, you get:

Exception in thread "main" java.dyn.WrongMethodTypeException:
(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
cannot be called as
(Ljava/dyn/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
	at java.dyn.MethodHandle.invokeVarargs(MethodHandle.java:330)
	at com.sun.runtime.ProxyHelper$1.invoke(ProxyHelper.java:57)
	at $Proxy0.compare(Unknown Source)
	at java.util.TimSort.countRunAndMakeAscending(TimSort.java:324)
	at java.util.TimSort.sort(TimSort.java:189)
	at java.util.TimSort.sort(TimSort.java:173)
	at java.util.Arrays.sort(Arrays.java:653)
	at lambdas.Main.lambdas(Main.java:67)
	at lambdas.Main.main(Main.java:19)


  -- Howard.

PS Full source, as requested previously, to follow


More information about the lambda-dev mailing list