Let’s consider the following code snippets:
public enum Currency { EUR, USD }
String currency = "EUR"; if(Currency.EUR.name().equals(currency)){ System.out.println("Transfer permitted"); }
How often do we see much the same scenario? It is not completely wrong since there is a try to use enums so it is not entirely “string driven” programming. However there is still a space to do some refactoring.
What about doing such stuff more in the object-oriented way? Enums are very powerful Java feature but for most of the cases there are only used in the simplest possible way.
public enum Currency { EUR() { @Override public boolean isTransferPermitted() { return true; } }, USD() { @Override public boolean isTransferPermitted() { return false; } }; public abstract boolean isTransferPermitted(); }
Currency currency = Currency.valueOf("EUR"); if(currency.isTransferPermitted()){ System.out.println("Transfer permitted"); }
In my opinion, refactored code is clearer and more self-documenting then the original one. Generally speaking it is a Template Method design pattern applied to Java enums.