48. Xlinting default constructors
We know that a Java class with no explicit constructor automatically gets an “invisible” default constructor for setting default values of the instance variables. The following House
class falls in this scenario:
public class House {
private String location;
private float price;
...
}
If this is exactly what we wanted, then it is no problem. But, if we are concerned about the fact that the default constructors are exposed by classes to publicly exported packages, then we have to consider using JDK 16+.
JDK 16+ added a dedicated lint meant to warn us about the classes that have default constructors. In order to take advantage of this lint, we have to follow two steps:
- Export the package containing that class
- Compile with
-Xlint:missing-explicit-ctor
(or-Xlint
,-Xlint:all
)
In our case, we export the package modern.challenge
in module-info
as follows:
module P48_XlintDefaultConstructor {
exports modern.challenge;
}
Once you compile the code with -Xlint:missing-explicit-ctor
, you’ll see a warning like in the following figure:
Figure 2.30: The warning produced by -Xlint:missing-explicit-ctor
Now, you can easily find out which classes have default constructors.