Qual a diferença - Um método com retorno e um método void?

[code]private String listaNomeAnimais(String s){
List lista = new ArrayList();
PraticandoCollectionsFramework praticandoList2 = new PraticandoCollectionsFramework();
//List lista = new ArrayList(); // ou List lista = new ArrayList();
//Collections.reverse(lista);//ordem inversa em que foi inserido na lista
//lista.add(this.setNomeAnimalDomestico(“Cachorro”));
praticandoList2.setNomeAnimalDomestico((“Cachorro”));
praticandoList2.setNomeAnimalSalvagem(“Leão”);
lista.add(praticandoList2);

		for (PraticandoCollectionsFramework praticandoList : lista) {
			System.out.println(praticandoList2.getNomeAnimalSalvagem() + "\n" + praticandoList2.getNomeAnimalDomestico());
		}
		//return lista.toString();
		return  lista.toString();
	}[/code]

Qual a diferença - Um método com retorno e um método void? Veja a situação acima, está retornando uma lista mas se fosse void funcionaria da mesma
forma, não?

[quote]andredecotia
Post 01/07/2010 18:14:58 Assunto: Qual a diferença - Um método com retorno e um método void?
view plaincopy to clipboardprint?

  1. private String listaNomeAnimais(String s){
  2.         List<PraticandoCollectionsFramework> lista = new ArrayList<PraticandoCollectionsFramework>();   
    
  3.         PraticandoCollectionsFramework praticandoList2 = new PraticandoCollectionsFramework();  
    
  4.         //List<String> lista = new ArrayList<String>(); // ou List<String> lista = new ArrayList();  
    
  5.         //Collections.reverse(lista);//ordem inversa em que foi inserido na lista  
    
  6.         //lista.add(this.setNomeAnimalDomestico("Cachorro"));  
    
  7.         praticandoList2.setNomeAnimalDomestico(("Cachorro"));  
    
  8.         praticandoList2.setNomeAnimalSalvagem("Leão");  
    
  9.         lista.add(praticandoList2);  
    
  10.         for (PraticandoCollectionsFramework praticandoList : lista) {  
    
  11.             System.out.println(praticandoList2.getNomeAnimalSalvagem() + "\n" + praticandoList2.getNomeAnimalDomestico());  
    
  12.         }  
    
  13.         //return lista.toString();  
    
  14.         return  lista.toString();  
    
  15.     }  
    

private String listaNomeAnimais(String s){ List lista = new ArrayList(); PraticandoCollectionsFramework praticandoList2 = new PraticandoCollectionsFramework(); //List lista = new ArrayList(); // ou List lista = new ArrayList(); //Collections.reverse(lista);//ordem inversa em que foi inserido na lista //lista.add(this.setNomeAnimalDomestico(“Cachorro”)); praticandoList2.setNomeAnimalDomestico((“Cachorro”)); praticandoList2.setNomeAnimalSalvagem(“Leão”); lista.add(praticandoList2); for (PraticandoCollectionsFramework praticandoList : lista) { System.out.println(praticandoList2.getNomeAnimalSalvagem() + “\n” + praticandoList2.getNomeAnimalDomestico()); } //return lista.toString(); return lista.toString(); }

Qual a diferença - Um método com retorno e um método void? Veja a situação acima, está retornando uma lista mas se fosse void funcionaria da mesma
forma, não? [/quote]

Cara o método com retorno você deve retornar o tipo especificado ou um tipo compativél, certo?
Já um método void, não retorna nada, ele apenas executa as instruções que estão no seu escopo.
No seu método citado acima, você teria que renomea-lo para “[color=blue]private void[/color] listaNomeAnimais(String s)”, e teria que remover a instrução return que está no final. Ai eli iria apenas executar e não iria te retornar nada.

Entendido :?: :!:

neste caso com retorno ou void não muda nada, certo?

aliás, eu chamo este método dá seguinte maneira:

 new PraticandoCollectionsFramework().listaNomeAnimais("André"); 

ou

 new PraticandoCollectionsFramework().listaNomeAnimais(null); 

qual é a diferença??? tem hora q ponho null só pra não dar erro de compilação, sei q é errado, e tb já perguntei aqui mas realmente tenho ainda
essa dificuldade…

abraço e grato pela atenção de todos,
André AS

André quando vc declara um método como void, ele não irá retornar nenhum valor, caso vc tente fazer algum return vai dar erro de compilação.

O exemplo abaixo vai dar erro, pq estou tentando um return num metodo void.

public void imprime(String nome){
          System.out.println(nome);
          return nome;
}

Em suma André, a única finalidade de imprime() é imprimir algo no console.
No entanto, se vc quiser um método que retorne um valor, vc deve declarar o tipo do retorno; se por um acaso você não retornar nada, também vai dar erro. Resumindo quando declarar void não retorne nada.

public int soma(int n1, int n2){
     return n1+n2;
}

No exemplo acima, caso não houvesse um retorno do tipo inteiro, daria erro. Se retornasse uma string também daria erro, um double ídem, boolean também.

Agora vamos ao seu código.
nessa declaração

private String listaNomeAnimais(String s)

Você está dizendo que obrigatoriamente deverá ser passado o parâmetro s do tipo string em todas as chamadas desse método. Por isso vc é obrigado a inserir parâmetro quando chama o método. Remova o “String s”. Note também que seu método, la no final, tem um return lista.toString(), justamente por causa da declaração do método. Tente modificar para o seguinte.

private void listaNomeAnimais(){  
     List<PraticandoCollectionsFramework> lista = new ArrayList<PraticandoCollectionsFramework>();   
     //código restante e retire o return pois o método agora é void
     }  
}  

99,9% entendido agora… Muito obrigado eulen… Quanto a forma que está atualmente não tem nada a ver ter q passar uma string qdo. chama o método, né? Devo tirá-lo por este motivo, certo?

Exatamente pela forma que está escrito que te obriga a passar um parâmetro. Veja que você está declarando duas coisas:

  1. que o o método obrigatoriamente recebe uma String; e,
  2. que este método deverá retornar uma String.

Caso voce descumpra uma das “obrigações”, vai ser penalizado.

Pelo que eu vejo, esse método que vc implementou tem a função de imprimir informações no console. Nota que você tá recebendo um parâmetro s do tipo String e não faz nenhum uso dele. Vc também não faz uso do retorno do método. Por tanto pode reescrever, como void (sem return) e sem passar parametros.