Primitive Obsession is the name of a code smell that occurs when we use primitive data types to represent domain ideas. For example, we use a string to represent a message or an integer to represent an amount of money.
For Example: Code with Primitive Obsession
// primitiveObsession.java public class primitiveObsession { public static void main(String args[]) { Integer[] cityPopulations = { 13000000, // London 21903623, // New York 12570000, // Tokyo 1932763, // Stockholm 1605602, // Barcelona 4119190 // Sydney }; for (Integer cityPopulation : cityPopulations) { System.out.println(cityPopulation); } } } public class City { private final String name; private final int population; private final Continent continent; public String getName() { return name; } public int getPopulation() { return population; } public Continent getContinent() { return continent; } public City(String name, int population, Continent continent) { this.name = name; this.population = population; this.continent = continent; } public String toString() { return String.format("%s has a popluation of %s and is located in %s", name, population, continent); } public static final City[] ALL_CITIES = { new City("London", 13000000, Continent.EUROPE), new City("New York", 21903623, Continent.AMERICA), new City("Tokyo", 12570000, Continent.ASIA), new City("Stockholm", 1932763, Continent.EUROPE), new City("Barcelona", 1605602, Continent.EUROPE), new City("Sydney", 4119190, Continent.AUSTRALIA) }; } //Continent.java public enum Continent { AMERICA, EUROPE, AFRICA, ASIA, AUSTRALIA } // withOutPrimitiveObsession.java public class withOutPrimitiveObsession { public static void main(String args[]) { for (City city : City.ALL_CITIES) { System.out.println(city.toString()); } } }