Throws em métodos

Não vejo sentido fazer uma checagem dessa e lançar uma exceção unchecked.

Por que?

Normalmente você não vai ficar checando seus parametros, o contrato diz que se eles nao estiverem corretamente formados, eu nao preciso obedecer minha pos condição, mas em alguns casos é válido sim.

Me ajudem a analisar minha situação. Eu já entendi teoricamente quando devo usar exceções checadas e não checadas, mas ainda estou meio confuso.
Tenho um método privado:

private void addEucalipto(BigDecimal altura) throws Exception{ // pré-condição if ( (altura.compareTo(new BigDecimal(0)) <= 0) ) throw new Exception("A altura deve ser maior que 0.");

Um público, que chama esse método:

[code] public void calculaEucaliptos(BigDecimal alturaProduto, BigDecimal vaoProduto) {

	//n = (((Vão de armazenagem / 2)–(0,80) –(1,60)-(1,80))/2)+3
	// -4,20 = –(0,80) –(1,60)-(1,80)
	int n = vaoProduto.divide(new BigDecimal(2)).divide(new BigDecimal("4.20")).
		divide(new BigDecimal(2)).add(new BigDecimal(3)).
		setScale(1,RoundingMode.DOWN).setScale(0,RoundingMode.UP).intValue();
			
	BigDecimal altura = alturaProduto;
	
	for (int i = 1; i <= n; i++) {
		switch (i) {
		case 1:
			altura = getHE(i,new BigDecimal("0.8"),altura,new BigDecimal("2.3"));
			addEucalipto(altura);
			break;
		case 2:
			altura = getHE(i,new BigDecimal("1.6"),altura,new BigDecimal("2.1"));
			addEucalipto(altura);		
			break;


default:
altura = getHE(i,new BigDecimal(“2.0”),altura,new BigDecimal(“1.2”));
addEucalipto(altura);
break;
}
}

}

    // esse é chamado pelo método acima
private BigDecimal getHE(int n, BigDecimal distancia, BigDecimal hAnterior, BigDecimal alturaSubmersa){
	BigDecimal altura = hAnterior.subtract( distancia.multiply(getTan30()) )
		.add(alturaSubmersa);
	return altura;
}

[/code]
Teoricamente, a exceção só será executada, se o calculaEucaliptos receber parâmetros negativos. Seria bom tirar as exceções de métodos privados, como o addEucalipto ?

[quote=ronaldorezende]
Teoricamente, a exceção só será executada, se o calculaEucaliptos receber parâmetros negativos. Seria bom tirar as exceções de métodos privados, como o addEucalipto ?[/quote]

Depende.

Normalmente sim, mas se isso for causa código duplicado (todo mundo que chama addEucalipto tem que chamar um checarValores() antes, por exemplo) pode ser melhor voce colcoar esta checagem em um só lugar, já que é sempre a mesma.

Estou pensando é em tirar a exceção no método privado addEucalipto e não deixar a exceção em lugar algum. Dessa forma, eu não faria checagem nesse método. Ele só será chamado de um local, que está colocando os atributos certos. O código só está em um método separado, porque ele é chamado várias vezes dentro do método chamador.

Vocês costumam colocar exceções em métodos privados?