Exporting - the wrong default?

Stephen Colebourne scolebourne at joda.org
Tue Jul 26 10:30:03 UTC 2016


Over recent weeks, there has been a long debate about exporting at
runtime, with other discussions about resources. I want to express my
view that listing specific packages for export seems to be the wrong
approach.

In my last thread [1], I found that just 2.5% of packages in the open
source libraries I looked at were suitable for being non-exported. In
the Strata library, designed for modules, the number rose to 11.7%.

As such, shouldn't we consider that the default for modules should be
changed? Instead of specifying the list of packages that are to be
exported, the module system should specify the list of packages that
are to be restricted:

module com.foo.bar {
    requires org.baz.qux;

    restricts com.foo.bar.alpha;  // package is not exported
    restricts com.foo.bar.beta to com.foo.baz;  // export only to a friend
    restricts at compiletime com.foo.bar.beta;  // export "dynamic"
}

This does not appear to change the underlying model of modules
(reliable configuration and strong encapsulation), but would make it
much more practical to use. After all, isn't Java meant to be designed
for the 80% use case? (which is clearly that everything is exported in
most projects)

Stephen

[1] http://mail.openjdk.java.net/pipermail/jigsaw-dev/2016-July/008823.html


More information about the jigsaw-dev mailing list