FunctionalInterface as a rule in the matching interfaces ?
Jean-Baptiste Bugeaud
bugeaud at gmail.com
Thu Aug 1 12:28:19 UTC 2013
Hello,
As a follow-up from Joe Darcy's proposal (2013-02-06) to add
@FunctionalInterface to some interfaces matching the requirements of
FI.
I propose that this improvement is applied to all the VM Java libs.
Doing a quick search, I've found some interfaces are not tagged as
FunctionaInterfaces but clearly look good candidates :
Here is the list of public API I have found so far :
java.security.PriviledgeAction
java.awt.event.ActionListener
java.lang.util.concurrent.Callable
java.util.Formattable
javax.management.remote.JMXAddressable
javax.naming.Referenceable
java.awt.print.Printable
Private packages also have some :
sun.nio.ch.Cancelable
sun.nio.ch.Groupable
sun.net.www.http.Hurryable
sun.misc.Timeable
sun.awt.image.ImageFetchable
sun.jvm.hotspot.utilities.soql.Callable
com.sun.jdi.Locatable
Tier lib used/derivated are also impacted (just FYI as it might be out
of scope of OpenJDK) :
com.sun.xml.internal.ws.api.config.management.Reconfigurable
com.sun.xml.internal.ws.api.config.management
com.sun.corba.se.spi.ior.MakeImmutable
jdk.internal.org.objectweb.asm.util.ASMifiable
jdk.internal.org.objectweb.asm.util.Textifiable
Some interfaces got two methods 1 "functional like" and 1 getter.
I propose to put the getter with a default and let the function
unimplemented so matching with the lambda.
Hence, the changes should be :
javax.security.auth.Destroyable : remove the default from destroy()
javax.security.auth.Refreshable : add a default to false to isCurrent()
javax.script.Compilable : add a default to the version with String
parameter (or the Reader version ?)
java.nio.file.Watchable : add a default on the method without
modifiers calling the method with modifiers but with empty array
javax.accessibility.AccessibleStreamable : add a default version to
getMimeTypes() returning a default raw byte stream mime type like
application/octet-stream for instance
sun.awt.SubRegionShowable : add a default to showIfNotLost()
More complex cases exists like :
java.lang.Appendable, lot of methods but for the same semantics,
should we provide defaults for variants and make it @FI ?
java.lang.Cloneable : clearly here it would be nice to get a defaulted
clone() as it will improve/ease the clonable semantics (implementing
Clonable will bring the default requirement). Here I am assuming there
is no side effect of droping cases where you declare Clonable but did
not implement clone(). Is it so ?
Please forgive my post if this suggestion has not already been
debatted but I neither found it in the ML search on GG nor in the hg
revs.
Also, please not that if the idea is followed, we should performe a
more comprehensive search, as mine is only done starting on all
"*able.java" files at this time.
Best Regards,
JB (bjb at dev.java.net)
More information about the core-libs-dev
mailing list