Duvida tipos de retorno

3 respostas
Cris_Finholdt

No livro para SCJP, nos exercicios rápidos, tem a seguinte afirmação.

  • Nada pode ser retornado a partir de um void, mas você pode decidir não retornar. É permitido que você use simplesmente return, em qualquer método com um tipo de retorno void, para interromper um método antes da sua finalização. Mas não é possível retornar nada a partir de um método com um tipo de retorno não-void.

Nossa, achei isso mto confuso!!!

Nada pode ser retornado a partir de um void, mas você pode decidir não retornar. (??? como assim ???)

É permitido que você use simplesmente return, em qualquer método com um tipo de retorno void, para interromper um método antes da sua finalização. (tbm nao entendi direito, alguem poderia me explicar pra q alguem faria isso? colocar algum código que exemplifique essa afirmação aqui, por favor?)

Mas não é possível retornar nada a partir de um método com um tipo de retorno não-void. (se eu tiver um método com tipo de retorno primitivo, ou objeto, eu posso retornar o primitivo e objeto respectivamente, nao posso? Tbm nao entendi mto bem essa afimação, se alguem puder me explicar melhor o q o autor do livro quis dizer… obrigada!)

3 Respostas

B

public void logIt(String [] msgs){ return; //retornando "nada". Compila normalmente. }

public void logIt(String [] msgs){ } //compila normalmente. Não é preciso retornar algo em um método "void".

public void logIt(String [] msgs){			 
    if(msgs==null || msgs.length==0){
       return;                        //se entrar aqui, retorna à execução normal do código restante logo a após a chamada ao método, sem nunca imprimir "end of method".
     }else{
       System.out.print(msgs);
     }
   System.out.print("end of method");
  }
  • Isso costuma ser usado em situações “evasivas”, onde atinge-se uma condição definitiva dentro de algum método e não é necessário que termine sua execução total para q haja um resultado. Muita gente usa isso em métodos com “switch”, onde ao invés de usar “break” em cada alternativa, usa-se logo um “return xxx”, retornando diretamente um resultado sem passar adiante no código. Desta forma:

public String logIt(){ int option = 1; switch(option){ case 1: return "option 1"; case 2: return "option 2"; case 3: return "option 3"; default: return "no valid option"; } }
Repare q executando esse método, mesmo não havendo “break” no fim das alternativas, o método retornará “option 1” sem descer para os outros cases, o que seria normal caso não houvesse “break” no fim das alternativas.

public int logIt(String [] msgs){			 
   return;            //retornando "nada". Não compila, pois exige q seja retornado "int".
}

Espero que tenha ajudado.

Cris_Finholdt

brrodo, obrigada!

esclareceu tudo mto bem!

B

Cris Finholdt:

brrodo, obrigada!

esclareceu tudo mto bem!

Espero q tenha conseguido ver tudo, pq eu fui editando o tópico várias vezes pra ir adicionando coisas hehe…

Criado 27 de abril de 2009
Ultima resposta 27 de abr. de 2009
Respostas 3
Participantes 2