[DÚVIDA] Retorno dentro de TRY

7 respostas
T

Olá, estou com problemas num método que retorna um valor. A variável que quero retornar é criada dentro de um try, mas dá erro (sim, pode ser que a variável não seja criada e assim não haverá retorno) mas existe algum modo de eu retornar ela dentro do try sem esse erro? (Erro de método “não void” sem retorno).

Exemplo:

public int teste(){
try{
int variavel = 0;

variavel++;

return variavel;
}
catch(Exception e){

JOptionPane...
}
}

O jeito que eu faço, eu acho que está errado

public int teste(){
int variavel = 0;
try{
variavel++;
}
catch(Exception e){

JOptionPane...
}
return variavel;
}

7 Respostas

nel

Olá!
Se deu exceção, poste-a, fica melhor para visualizarmos o problema :slight_smile:

Sobre o que quer, basta fazer:

try {
 //seu código
 return algumValor;
} catch (Exception e) {} return null;

Não esqueça, caso ocorra uma exceção, mesmo assim deve retorna algum valor, ok?:slight_smile:

Edit: ao invés de retornar o valor podes lançar a exceção, isso “desobriga” que você tenha de colocar o return algumvalor;
já que não podes dar um return após lançar uma exceção.

Talius

Não acredito que o jeito que você está fazendo esteja errado. É até muito utilizado em alguns casos.

Mas você poderia fazer de outra forma. Poderia retornar 0 caso caia na exceção ou até lança-la para que seja tratada em outro método.
public int teste(){
	try{
		int variavel = 0;
		variavel++;
		return variavel;
	}
	catch(Exception e){

		JOptionPane.showMessageDialog(null, "");
		return 0;
	}
}
lina

Oi,

Para! Para! Para! Para! rsrs

a sua maneira já esta correta. Porque não criar a variável fora do Try ??

Tchauzin!

nel

lina:
Oi,

Para! Para! Para! Para! rsrs

a sua maneira já esta correta. Porque não criar a variável fora do Try ??

Tchauzin!

Rs. Acho que eu posso ter complicado a vida dele ao invés de ajudar.
Sim, está correto e Lina, ele já cria a variavél fora do Try, apenas incrementa ela dentro do Try :slight_smile:

T

Ah quero evitar isso, porque isso foi meio que um exemplo, na minha aplicação eu crio um objeto. E nao quero criar o objeto se um resultset não encontrar nada.

public Contato metodo(){

String query = "select * from contato where nome = 'x'";
//aqui, independente do resultset, o objeto é criado, nao queria isso
Contato contato = new Contato();
try{

PreparedStatement statement = connection.prepareStatement(sql);
			
ResultSet resultset = statement.executeQuery();
			
if(resultset.next()){			
	
contato.setNome(resultset.getString("nome"));
contato.setEmail(resultset.getString("email"));
contato.setEndereco(resultset.getString("endereco"));
contato.setData(resultset.getString("dataNascimento"));

return contato;				
}			
statement.close();
resultset.close();	
}
catch(Exception e){}

mas nao gostei de como ficou, fiz desse jeito agora

public Contato metodo(){

String query = "select * from contato where nome = 'x'";

Contato contato;
try{

PreparedStatement statement = connection.prepareStatement(sql);
			
ResultSet resultset = statement.executeQuery();
			
if(resultset.next()){			
	
contato = new Contato();
				
contato.setNome(resultset.getString("nome"));
contato.setEmail(resultset.getString("email"));
contato.setEndereco(resultset.getString("endereco"));
contato.setData(resultset.getString("dataNascimento"));

return contato;				
}			
statement.close();
resultset.close();	
}
catch(Exception e){}

return null;
}

mas só esse return null; depois do catch que não me agradou

Contato é uma classe só com get e set

lina

Oi,

Faz assim:

public Contato metodo(){

String query = "select * from contato where nome = 'x'";

Contato contato = null;
try{

PreparedStatement statement = connection.prepareStatement(sql);
			
ResultSet resultset = statement.executeQuery();
			
if(resultset.next()){			
	
contato = new Contato();
				
contato.setNome(resultset.getString("nome"));
contato.setEmail(resultset.getString("email"));
contato.setEndereco(resultset.getString("endereco"));
contato.setData(resultset.getString("dataNascimento"));
		
}			
statement.close();
resultset.close();	
}
catch(Exception e){}

return contato;

}

Não precisa 2 retornos. Você já declara antes do Try sua classe.

Tchauzin!

T
lina:
Oi,

Faz assim:

public Contato metodo(){

String query = "select * from contato where nome = 'x'";

Contato contato = null;
try{

PreparedStatement statement = connection.prepareStatement(sql);
			
ResultSet resultset = statement.executeQuery();
			
if(resultset.next()){			
	
contato = new Contato();
				
contato.setNome(resultset.getString("nome"));
contato.setEmail(resultset.getString("email"));
contato.setEndereco(resultset.getString("endereco"));
contato.setData(resultset.getString("dataNascimento"));
		
}			
statement.close();
resultset.close();	
}
catch(Exception e){}

return contato;

}

Não precisa 2 retornos. Você já declara antes do Try sua classe.

Tchauzin!

Realmente, brisa minha ... 1 retorno, caso não entre no if, ele retorna o null.

Tnks ^^

Criado 23 de março de 2011
Ultima resposta 23 de mar. de 2011
Respostas 7
Participantes 4