Alguém pode me ajudar? Erro ao compilar: Missing return statement

Prezados,

Estou estudando Java e me deparei com um programinha bem simples. Entretanto, aparece um erro que não consigo entender por qual razão ele está dando no ponto do código. O erro é “misssing return statement” e ocorre no método “setNome(String n)”, mais especificamente na linha 46 do código. Poderiam me dizer como estar resolvendo essa situação? Desde já fico agradecida!!

Segue abaixo o código:

[code]import java.util.*;
class Empregado
{
public Empregado (int num, String n, double s, GregorianCalendar d)
{
numero = num;
nome = n;
salario = s;
dataContratacao = d;
}

public void print()
{
	System.out.println (numero + " " + nome + " " + salario + " " + anoContratacao());
}

public void aumentaSalario (double percentualDeAumento)
{
	salario = salario * (1 + (percentualDeAumento/100));
}

//método que altera a data de contratação usando a classe GregorianCalendar.
public void alteraDataContratacao (int ano, int mes, int dia)
{
	dataContratacao.set (Calendar.YEAR, ano);
	dataContratacao.set (Calendar.MONTH, mes);
	dataContratacao.set (Calendar.DATE, dia);
}

//método que retorna o ano de contratação usando a classe GregorianCalendar.
public int anoContratacao()
{
	return dataContratacao.get(Calendar.YEAR);
	//return dataContratacao.getYear();
}

public String getNome()
{
	return nome;
}

//este método está dando erro: missing return statement.
public String setNome(String n)
{
	nome = n;
}

private int numero;
private String nome;
private double salario;
private Calendar dataContratacao;//variável que possui a data de contratação.

}[/code]

     public void setNome(String n)  
     {  
         nome = n;  
     }

Olá, o erro é que vc colocou retorno no metodo mas não retorna nada:

Errado:

public String setNome(String n)   
    {   
        nome = n;   
    }  

Como é um metodo set vc pode colocar o retorno dele como void:

public void setNome(String n)   
    {   
        nome = n;   
    }  

Agora sim :wink:

Espero ter ajudado.

recapitulando…
Metodos set use void
metodos get use String Integer …

Não seja tão bitolado assim.

Em alguns casos é interessante retornar a referência ao próprio objeto, ou seja, this (embora os setters padrão Javabeans sempre sejam void). Isso é feito quando se quer usar “fluent programming”.

Oi KassiPretti, eh o seguinte em java vc pode retornar ow nao oq significa isso, quando vc declara um metodo do tipo void ele naum tem nenhum tipo de retorno mas quando vc declara metodos com alguma tipagem ele tem que retorna o tipo declarado
no seu caso vc declarou um metodo do tipo String portanto o metodo devera retorna pra vc uma String

public String getNome(){ return nome; }
E geralmente em metodos de retorno nao se passa parametro somente quando vc esta setando

public void setNome(String nome){ this.nome = nome; }
bom espero ter ajudado

abrcs

pooootz q cara ignorante, o zé ruela no caso dela ela resolveria assim só isso que eu quis dizer tá o mal educado bitolado e a sua vó zé ruela!
cada mané que aparece por aqui e ainda e moderador um tonto desse!

Oi Alessandro_Alves acho que eu não me expressei direito, o primeiro caso que mostrei foi o erro cometido pela Lys, o certo vem logo abaixo.
No caso do metodo set retornar ou não alguma coisa cabe o que o programador deseja, mas geralmente o set não apresenta retorno. Já nos métodos get eles sempre apresentaram retorno, pois é para isso que eles são implementados. Até temos o operador this para especificar o retorno da propria variavel da classe.

Espero que tenha entendido agora :wink:

O que aconteceu no seu codigo foi o seguinte, vc tentou passar pra um metodo void um tipo de retorno no vc o declarou como String e depois setNome, isso pra java nao tem problema oq acontece e por convensao eh que metodos que devem ter retorno na declaracao vc colo o get e no metodos do tipo void vc coloca set era isso que eu queria te explicar.
Bom quanto aos metodos sets caso vc esteja dentro da normas eles nunca retornaram nd somente modificam

abrcs

IMHO um setter poderia ser assim

[code]class X{
private Y y;
private Z z;

public Y getY(){ return this.y; }
public Z getZ(){ return this.z; }

public X setY(Y y){ this.y = y; return this; }    
public X setY(Z z){ this.z = z; return this; }    

public static void main(String [] xxx){
     X x = new X();
     x.setY("...").setZ("...");
}

}[/code]

Ainda mais quando setY/setZ for algo mais ‘fluente’.

Isso peczenyj o tipo de retorno de um set depende do programador, claro que temos padrões, mas nada impede o set retornar algo.

[quote=lgweb][quote]
Não seja tão bitolado assim.

Em alguns casos é interessante retornar a referência ao próprio objeto, ou seja, this (embora os setters padrão Javabeans sempre sejam void). Isso é feito quando se quer usar “fluent programming”.

[/quote]

pooootz q cara ignorante, o zé ruela no caso dela ela resolveria assim só isso que eu quis dizer tá o mal educado bitolado e a sua vó zé ruela!
cada mané que aparece por aqui e ainda e moderador um tonto desse![/quote]

Calma… O thingol só quis tentar abrir sua mente p/ não ficar seguindo receitas como se as mesmas fossem verdades absolutas e aplicáveis a todas as situações… Não precisa estressar…

Concordo com o thingol, pq vc deu a entender que tem que decorar regrinha como se tivesse na escola:
X faz isso
Y faz aquilo…

Mas ele não quis te ofender…

Até mais!

Muito obrigada pessoal! Todos me ajudaram. Mas gostaria de saber o que vem a ser “fluent programming”.

Grata,

Explicando de maneira informal temos que fluent programming seria uma programação mais facil de visualizar (intuitiva) seguindo certos padrões estabelecidos como uma boa prática de programação.