In general, the way that I've found most effective in getting rid of switch statements/deluges of if's is to use
polymorphism and delegation. One realization of this is the Command pattern that Ali refers to. The GoF book (Design Patterns) is, of course, a great resource for this. Another that I like, especially for Java programmers, is "Design Patterns Java Workbook" by Steve Metsker.
Here's the basic design approach. Set up an interface with a method that takes the data used in the body of your switch cases. Implement the interface with handler classes that each contain the logic of a single switch case. Use a factory method to construct instances of your handler classes, and pass those handlers your data.
So far, we've seen no reflection in this discussion. Add dynamic loading and reflective construction to your factory method and you open your application up to anything you might write or integrate in the future.
For more discussion of the dynamic loading and construction, see this
thread:
https://coderanch.com/t/272636/java/java/Whew-Release-Done and Chapter 3 in our book.
Best Regards,
Nate