RFR: 8048199: Replace anonymous inner classes with lambdas, where applicable, in JNDI

Roger Riggs rriggs at openjdk.java.net
Fri Apr 9 13:55:26 UTC 2021


On Fri, 9 Apr 2021 13:30:27 GMT, Alan Bateman <alanb at openjdk.org> wrote:

>> ### Description
>> This fix is part of a previous effort to both cleanup/modernise JNDI code, the details of which can be seen in [JDK-8048091](https://bugs.openjdk.java.net/browse/JDK-8048091). A number JNDI methods under `java.naming` use Anonymous Inner Classes in cases where only a single object unique to the requirements of the method is used. The issues these occurrences of AICs cause are highlighted below.
>> 
>> - AICs, in the cases concerned with this fix, are used where only one operation is required. While AICs can be useful for more complex implementations (using interfaces, multiple methods needed, local fields etc.), Lambdas are better suited here as they result in a more readable and concise solution.
>> 
>> ### Fixes
>> - Where applicable, occurrences of AICs were replaced with lambdas to address the issues above resulting primarily in more readable/concise code.
>
> src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java line 401:
> 
>> 399:         return AccessController.doPrivileged(
>> 400:                 (PrivilegedAction<String>) () -> System.getProperty(propName, defVal)
>> 401:         );
> 
> If you want to avoid the cast then you could create the PrivilegedAction explicitly, e.g.
> 
> PrivilegedAction<String> pa = () -> System.getProperty(propName, defVal);
> return AccessController.doPrivileged(pa);

An alternative here would be to use sun.security.action.privilegedGetProperty(prop, default).
The package is already exported from java.base to java.desktop, etc.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3416


More information about the security-dev mailing list