JDK 16 RFR of JDK-8071961: Add javac lint warning when a default constructor is created

Joe Darcy joe.darcy at oracle.com
Thu Jul 30 17:15:10 UTC 2020


On 7/30/2020 12:51 AM, Alex Buckley wrote:
> On 7/29/2020 9:32 PM, Joe Darcy wrote:
>> Perhaps a bit better as
>>
>>      Since it does not declare any explicit constructors, class {0} 
>> in exported package {1} of module {2} exposes a default constructor
>
> I get your point about warning for the absence of something, in which 
> case the lint warning should be `missing-explicit-ctor` and the 
> message should be:
>
>   class {0} in exported package {1} of module {2} is missing an 
> explicit constructor; clients rely on the default constructor
>
> However, what if a class explicitly declares a ctor with the same 
> shape as the default ctor? JLS 13.1 teaches that a class file doesn't 
> distinguish an explicitly declared ctor with the right shape versus 
> the implicitly declared ctor. ("the following constructs are declared 
> implicitly in source code, but are not marked as mandated because only 
> formal parameters can be so marked in a class file: - Default 
> constructors of classes ...")
>
Operationally, the warning is only issued if the compiler generates the 
default constructor when compiling the source file.

-Joe



More information about the compiler-dev mailing list