Olá, seria errado eu dar um Throw na exception ao tentar chamar um ProximoCargo do Gerente?
Por exemplo:
GERENTE {
@Override
public Cargo getProximoCargo() {
throw new ValidacaoException("Impossivel promover um Gerente");
}
};
Em vez de:
if(Cargo.GERENTE == funcionario.getCargo()) {
throw new ValidacaoException("Impossível promover um Gerente");
}