Text
java- single constructor Vs multiple constructors
❌ The Multiple Constructor Example
public class Human {
private String name;
private int limbs;
private String skinColor;
public Human(String name) {
this(name, 4, "Unknown"); // Magic numbers!
}
public Human(String name, int limbs) {
this(name, limbs, "Unknown");
}
Why this fails: Hidden assumptions (Why default limbs = 4?), duplicate validation (What if limbs < 0?), brittle maintenance (Adding bloodType breaks all constructors)
✅ The Single Constructor Solution
public class Human {
private final String name; // Required
private final int limbs; // Required
private final String skinColor; // Required
public Human(String name, int limbs, String skinColor) {
Objects.requireNonNull(name);
if (limbs < 0) throw new IllegalArgumentException("Limbs cannot be negative");
this.name = name;
this.limbs = limbs;
this.skinColor = skinColor;
}
}
benefits: No magic defaults -Forces explicit values, validation in one place - Fail fast principle, immutable by design - Thread-safe and predictable
Handling Optional Fields: The Builder Pattern For complex cases (like optional eyeColor), use a Builder:
Human britta = new Human.Builder("Britta", 4)
.skinColor("dark")
.eyeColor("blue")
.build();
Why Builders win: Clear defaults (`.skinColor("dark")` vs. constructor overloading), flexible (Add new fields without breaking changes), readable (Named parameters > positional args)
When Multiple Constructors Make Sense
Simple value objects (e.g., Point(x, y)), framework requirements (JPA/Hibernate no-arg constructor), most classes need just one constructor. Pair it with: factory methods for alternative creation logic and builders for optional parameters
This approach eliminates: hidden defaults, validation duplication and maintenance nightmares Do you prefer single or multiple constructors? Have you been bitten by constructor overload? Share your war stories in the comments!
#Java #CleanCode #OOP #SoftwareDevelopment #Programming
1 note
·
View note