Tipo de Retorno:
O próximo item em uma declaração de método é o tipo de retorno. O tipo de retorno pode ser um tipo Java real, como String ou int . Se não houver um tipo de retorno, a palavra-chave void será usada. Esse tipo de retorno especial vem do idioma inglês: void significa sem conteúdo. No Java, não temos nenhum tipo lá.
Lembre-se de que um método deve ter um tipo de retorno. Se nenhum valor for retornado, o tipo de retorno é nulo . Você não pode omitir o tipo de retorno.
Ao verificar os tipos de retorno, você também deve procurar dentro do corpo do método. Métodos com um tipo de retorno diferente de nulo são obrigados a ter uma declaração de retorno dentro do corpo do método. Essa declaração de retorno deve incluir o primitivo ou o objeto a ser retornado. Os métodos que têm um tipo de retorno nulo têm permissão para ter uma declaração de retorno sem valor retornado ou omitir completamente a declaração de retorno. Pronto para alguns exemplos? Você pode explicar por que esses métodos são compilados ou não?
public void walk1() { }
public void walk2() { return; }
public String walk3() { return ""; }
public String walk4() { } // DOES NOT COMPILE
public walk5() { } // DOES NOT COMPILE
String walk6(int a) { if (a == 4) return ""; } // DOES NOT COMPILE
Como o tipo de retorno de walk1() é nulo, a instrução de retorno é opcional. walk2() mostra a instrução de retorno opcional que não retorna nada corretamente. walk3 () é um método válido com um tipo de retorno String e uma instrução de retorno que retorna uma String. walk4 () não compila porque está faltando a instrução de retorno. walk5 () não compila porque o tipo de retorno está ausente.
walk6 ( ) é um pouco complicado. Existe uma declaração de retorno, mas nem sempre é executada. Se a é 6, a declaração de retorno não é executada. Como a String sempre precisa ser retornada, o compilador reclama.
Ao retornar um valor, ele precisa ser atribuído ao tipo de retorno. Imagine que existe uma variável local daquele tipo ao qual está atribuída antes de ser retornada. Você pode pensar em como adicionar uma linha de código com uma variável local nesses dois métodos?
int integer() {
return 9;
}
int long() {]
return 9L; // DOES NOT COMPILE
}
É um exercício bastante mecânico. Você acabou de adicionar uma linha com uma variável local. O tipo da variável local corresponde ao tipo de retorno do método. Então você retorna essa variável local capaz em vez do valor diretamente:
int integerExpanded() {
int temp = 9;
return temp;
}
int longExpanded() {
int temp = 9L; // DOES NOT COMPILE
return temp;
}
Isso mostra mais claramente por que você não pode retornar uma primitiva longa em um método que retorna um int . Você não pode incluir tanto tempo em uma variável int , portanto também não pode devolvê-la diretamente.