Code Smell 13 - Empty Constructors

Written by mcsee | Published 2026/01/13
Tech Story Tags: clean-code | clean-architecture | refactoring | software-development | software-engineering | code-smells | non-parameterized-constructors | incomplete-objects

TLDRPass the essence to all your objects so they will not need to mutate.via the TL;DR App

Non-parameterized constructors are a code smell of anΒ invalidΒ object that will dangerously mutate. Incomplete objects cause lots of issues.

TL;DR: Pass the essence to all your objects so they will not need to mutate.

Problems πŸ˜”

  • Mutability
  • Incomplete objects
  • Concurrency inconsistencies between creation and essence setting.
  • Setters

Solutions πŸ˜ƒ

  1. Pass the object's essence on creation
  2. Create objects with theirΒ immutableΒ essence.

Refactorings βš™οΈ

https://hackernoon.com/refactoring-remove-setters-codesmell?embedable=true

https://hackernoon.com/refactoring-016-building-with-the-essence?embedable=true

Examples πŸ“š

  • Some persistence frameworks in statically-typed languages require an empty constructor.

Sample Code πŸ“–

Wrong 🚫

class AirTicket {
   constructor() {     
  }
}

Right πŸ‘‰

class AirTicket {
   constructor(origin,
                destination, 
                arline,
                departureTime,
                passenger) {     

  // ...
  }
}

Detection πŸ”

Any linter can warn about this (possible) situation.

Exceptions πŸ›‘

Tags 🏷️

  • Anemic Models

Level πŸ”‹

[X] Beginner

Why the Bijection Is Important

In theΒ MAPPER, objects correspond to real-world entities.

Real people aren't born nameless and formless, then gradually acquire attributes.

You don't meet someone whoΒ temporarilyΒ has no age or email address.

When youΒ modelΒ a person, you should capture their essential attributes at birth, just like reality.

Breaking this bijection by creating hollow objects forces you to represent impossible states.

Empty constructors create phantom and invalid objects that don't exist in your domain model, violating the mapping between your code and reality.

AI Generation πŸ€–

AI code generators frequently produce this smell because they often follow common ORM patterns.

When you prompt AI to "create a Person class," it typically generates empty constructors with getters and setters.

AI tools trained on legacy codebases inherit these patterns and propagate them unless you explicitly request immutable objects with required constructor parameters.

AI Detection 🧲

AI tools can detect and fix this smell when you provide clear instructions.

You need to specify that objects should be immutable with required constructor parameters.

Without explicit guidance, AI tools may not recognize empty constructors as problematic since they appear frequently in training data.

Try Them! πŸ› 

Remember: AI Assistants make lots of mistakes

Suggested Prompt: Create an immutable class with required information. Include constructor validation and no setters. Make all fields final and use constructor parameters only

Without Proper Instructions πŸ“΅

With Specific Instructions πŸ‘©β€πŸ«

Conclusion 🏁

Always create complete objects. Make their essence immutable to endure through time.

Every object needs its essence to be a valid one since its inception.

We should read Plato's ideas about immutability and create entities in a complete and immutable way.

These immutable objects favor bijection and survive the passing of time.

Relations πŸ‘©β€β€οΈβ€πŸ’‹β€πŸ‘¨

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-vi-cmj31om

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ii-o96s3wl4?embedable=true

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxiv

More Information πŸ“•

https://hackernoon.com/is-it-crystal-clear-for-everybody-that-a-date-should-not-mutate-wuoy3z03?embedable=true

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ii-o96s3wl4?embedable=true

Credits πŸ™

Photo by Brett Jordan in Pexels


In a purely functional program, the value of a [constant] never changes, and yet, it changes all the time! A paradox!

Joel Spolski

https://hackernoon.com/400-thought-provoking-software-engineering-quotes?embedable=true


This article is part of the CodeSmell Series.

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd


Written by mcsee | I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written
Published by HackerNoon on 2026/01/13