On 03/07/2013 17:24, Remi Forax wrote:

Hi Alan,
you can use a method reference instead a lambda here,
so
  PrivilegedAction<Boolean> action = () -> hasNextService();
return AccessController.doPrivileged(action, acc);
can be written
  return AccessController.doPrivileged(this::hasNextService, acc);
(me crossing my fingers in hope that the compiler will not be confused by the overloads).
There is a problem using method references here that need to be tracked down. In TypeConvertingMethodAdapter where it handles boxing then String.format is used but that triggers the loading of formatter providers and recursive initialization that blows the stack and manifests as a BootstrapMethodError. I need to ask Robert about this or bring it up on lambda-dev as I'm not sure why this doesn't happen with a lambda. If we have a bootstrapping issue then it may be that ServiceLoader will need to use an inner class here.

AccessController.doPrivileged does have overloads that javac reports as ambiguous. As it happens someone made a good suggestion recently on security-dev that the new limited doPrivlieged methods take this into account.

-Alan.


Reply via email to