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

Reply via email to