On 5/17/2023 7:07 AM, Ethan McCue wrote:
> if they have setup their projects correctly.
Can you be more clear about what "setup their projects correctly"
means? If you are referring to usage of --release, you seem to be
making a pretty strong argument that this will not be the case.
Use of "javac --release $OLD ..." rather than "javac -source $OLD
-target $OLD ..." avoids certain categories of false compatibility problems.
In brief, " -source $OLD -target $OLD " alone doesn't set the
bootclasspath equivalent to the libraries on the old release, meaning
the compiled code can use newer methods in the core libraries, such as a
new overload or a new covariant override of an existing method. Those
new methods do not exist when actually running against the old release.
That above situation doesn't happen all the time, but happened often
enough to generate a steady trickle of bug reports before --release was
introduced. To avoid this, --release also sets the bootclasspath
equivalent to the older value.
HTH,
-Joe