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

Reply via email to