[RESOLVIDO]Problema com trecho de código que nunca será executado

Bom dia!
Considerem o exemplo abaixo:

while(false) {
    //faz qualquer coisa
}

Isso aí nem compila pois é um trecho de código que nunca será executado. Mas reparem no código abaixo:

private void menuListaConta() {
	int tipo = menuTipoConta("Listar Contas");
	
	switch(tipo) {
		case 1:
			listaContaCorrente();
			break;
		case 2:
			listaContaPoupanca();
			break;
		case 0:
			return;
		default:
			System.out.println("Valor invalido. Tente novamente.");
	}	
}

private int menuTipoConta(String menuAtual) {
	System.out.print(menuAtual + " - Digite o tipo de conta: (1)Conta corrente (2)Conta poupanca (0)Sair: ");

	while(true) {
		int tipo = leitor.leInteger(); // Método que só aceita valores inteiros do teclado e os retorna.
	
		if((tipo == 1) || (tipo == 2) || (tipo == 0))
			return tipo;
		else
			System.out.println("Valor invalido. Tente novamente.");
	}
}

Notem que o default também nunca será executado.

Por que ele compila e executa sem problemas?

1 - while indica um trecho de código que irá se repetir ATÉ QUE a condição imposta torne-se falsa.
2 - switch/case/default indica trechos de código que irão ser executados de acordo com o valor do parâmetro passado.

Se eu tirar o default é considerado má prática de programação?

Não.

Ok, entendi.

Obrigado!

Obviamente você já deve ter ouvido ou lido (senão, logo irá) sobre “if bom é if morto”.
O teu código tem um if

Que não precisaria existir e, isso sim, é uma má prática.
Veja que a regra é redundante, você valida uma coisa e depois valida de novo no switch.
É uma opção tua, mas, o ideal é eliminar ifs que dependem de regras específicas.

É que “int tipo = leitor.leInteger()” recebe um valor qualquer inteiro, mas eu só quero 0, 1 ou 2. Então o método “menuTipoConta” só vai retornar um desses três valores. Depois, em “menuListaConta” eu trato adequadamente cada um dos três casos.

Qual seria o jeito mais adequado?

E, mantendo o default, trata os casos que não atenderem ao que espera.

Não sei se entendi bem, mas você sugere que eu não use “menuTipoConta”. Que eu faça a leitura direto dentro de “menuListaConta”? Só que aí eu vou ter que colocar um while(true) encapsulando o switch para que o usuário fique em loop até digitar um dos três valores válidos.

Eu pensei que você falava para eu usar algo como:

if(tipo >=0 && tipo <=2) {
    return tipo;
}

Veja, eu não sei qual a tua necessidade, porém, eu não colocaria o if, sendo que você tem a validação no switch.
Apenas isso.

Minha necessidade é bem específica. Só isso que eu te disse. Vou fazer do jeito que você sugeriu então. Se é que eu entendi corretamente.

Sou novo em programação. Nesse caso eu estava encarando o if como validador e o switch como seletor.

O switch é uma adaptação do if, para evitar que você crie muitos ifs aninhados.

Ok.

Obrigado por sua ajuda!