DEV Community

Cover image for Code Smell 26 - Exceptions Polluting
Maxi Contieri
Maxi Contieri

Posted on • Edited on • Originally published at maximilianocontieri.com

3 1

Code Smell 26 - Exceptions Polluting

It is very nice to have lots of different exceptions. Your code is declarative and robust. Or not?

TL;DR; Don't create anemic and empty objects. Even if they are Exceptions.

Problems

  • Over Design

  • Namespace Pollution

Solutions

  1. Avoid creating anemic exceptions as globals.

  2. Create exceptions only if they behave differently.

  3. Model exceptions with objects. Classes are handy for lazy programmers.

Sample Code

Wrong

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReader {

    public static void main(String[] args) {
        FileReader file = null;

        try {
            file = new FileReader("source.txt");
            file.read();
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(FileLockedException e) {
            e.printStackTrace();
        }
        catch(FilePermissionsException e) {
            e.printStackTrace();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                file.close();
            }
            catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Right

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReader {

    public static void main(String[] args) {
        FileReader file = null;

        try {
            file = new FileReader("source.txt");
            file.read();
        }
        catch(FileException exception) {
            if (exception.description == (this.expectionMessages().errorDescriptionFileTemporaryLocked() {
                //sleep and retry    
                //IF behaviour is the same with all the exceptions just change the text on object creation and raise the icorrect instance
            }            
            this.showErrorToUser(exception.messageToUser();
             //This example is simplified. Text should be translated
        }                
        finally {
            try {
                file.close();
            } 
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Detection

New exceptions should override behavior methods.

No. code, description, resumable, etc. are not behavioral.

Tags

  • Abuser

  • Naming

Conclusion

You would not create different classes for every Person instance, so they return different names. Why would you do it with exceptions.

How often do you catch a specific exception?.

Go out and check your code.

Is it necessary to be a class?

You are already coupled to the class. Couple to the description instead.

Exception instances should NOT be Singletons.

Relations

Credits

Photo by Nick van den Berg on Unsplash


You will fall to ruin because you believe that exceptions to the rule make new rules.

Pierce Brown


This article is part of the CodeSmell Series.

Last update: 2021/07/13

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay