On 03/07/2014 12:31 PM, Alan Bateman wrote:
On 06/03/2014 21:10, Mandy Chung wrote:
Webrev:
http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8035808/webrev.00/
This patch converts the use of sun.security.action.GetPropertyAction
tolambda
(PrivilegedAction<String>) () -> System.getProperty(key)
Similarly for GetIntegerAction and GetLongAction.
The sun.security.action.* classes are just convenient classes that
are used not only by the security library but also used by RMI,
management, a couple other components that cause cross-module
dependency that are not absolutely necessary. They can simply be
replaced to call System.getProperty, Integer.getInteger, or
Long.getLong at the callsite.
This looks good to me as it reduces the number of inner classes,
removes a lot of dependencies on sun.* APIs, and updates the code to
use new language features. The only downside appears to the cast but
you can't really get away from that here (at least not without
declaring a PrivilegedAction for each usage).
-Alan.
Maybe, if PrivilegedAction interface could be retrofitted as follows:
public interface PrivilegedExceptionAction<T> {
T run() throws Exception;
}
public interface PrivilegedAction<T> extends
PrivilegedExceptionAction<T> {
@Override
T run();
}
Then in majority of cases where lambda body did not throw a checked
exception, the most-specific rule would choose the
doPrivileged(PrivilegedAction) method automatically... For
checked-exceptional-cases the cast would still be needed.
Regards, Peter