AccessController.doPrivileged and default methods
Michael Rasmussen
michael.rasmussen at zeroturnaround.com
Tue Jul 4 11:57:01 UTC 2017
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)
More information about the security-dev
mailing list