I just went over this code and thought it was related and might be interested to other developers.
What's the difference between declaring a enum like this public enum Type { User, DomainRouter, ConsoleProxy, SecondaryStorageVm, ElasticIpVm, ElasticLoadBalancerVm, InternalLoadBalancerVm, /* * UserBareMetal is only used for selecting VirtualMachineGuru, there is no * VM with this type. UserBareMetal should treat exactly as User. */ UserBareMetal; public static boolean isSystemVM(VirtualMachine.Type vmtype) { if (DomainRouter.equals(vmtype) || ConsoleProxy.equals(vmtype) || SecondaryStorageVm.equals(vmtype) || InternalLoadBalancerVm.equals(vmtype)) { return true; } return false; } } Vs public enum Type { User(false), DomainRouter(true), ConsoleProxy(true), SecondaryStorageVm(true), ElasticIpVm(true), ElasticLoadBalancerVm(true), InternalLoadBalancerVm(true), /* * UserBareMetal is only used for selecting VirtualMachineGuru, there is no * VM with this type. UserBareMetal should treat exactly as User. */ UserBareMetal(false); private boolean _isSystemVm; private Type(Boolean isSystemVm) { _isSystemVm = isSystemVm; } public boolean isSystemVM() { return _isSystemVm; } } The second declaration is more self-descriptive: - It tells developer when they add more to this enum, they have to specify whether it is a system vm. They may have missed the static method in the first declaration and causes failures later. - It tells developers using the enum that there's a property that let's them know it is a system vm so they can do discovery using a context-sensitive editor like Eclipse. This is the reason why enum is not a simple constant declaration in Java (vs C/C++). --Alex