Very interesting. The exception originates in the VM, so I added the hotspot-dev list to the discussion. It looks like the VM either can't find the method, or it decides that it's not the right kind of method.

On 7/4/2017 7:57 AM, Michael Rasmussen wrote:
Hi

I was playing around with having an easy way to have doPrivileged call
void methods via lambdas/method references, and noticed that if you
use AccessController.doPrivileged(PrivilegedAction), and the run
method is implemented as a default method, then you get the following
exception: java.lang.InternalError: No run method

I failed finding anywhere in the documentation stating this should not
be supported, or a bug report about it, so writing/asking here.

See example code below

Kind regards
Michael Rasmussen


//----

package com.test;

import java.security.AccessController;
import java.security.PrivilegedAction;

public class Test {
   interface VoidPrivilegedAction extends PrivilegedAction<Void> {
     void perform();

     @Override
     default Void run() {
       perform();
       return null;
     }
   }

   static void doPrivileged(VoidPrivilegedAction act) {
     AccessController.doPrivileged(act);
   }

   public static void main(String[] args) throws Exception {
     doPrivileged(() -> System.out.println(System.getProperty("java.home")));
   }
}

//----

Exception in thread "main" java.lang.InternalError: No run method
at java.security.AccessController.doPrivileged(Native Method)
at com.test.Test.doPrivileged(Test.java:18)
at com.test.Test.main(Test.java:22)

Reply via email to