Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no Ex. 4 da Aula 5 - Getters x returns

Bom dia! No meu código alterei o atributo Funcionarios[] funcs para private e fiz um getter conforme o exemplo do exercício. Minhas classes EMPRESA e FUNCIONARIO estão da seguinte forma:

CLASSE EMPRESA:
(...)
private Funcionario[] funcs;
(...)
public Funcionario getFuncs(int id){
    return this.funcs[id].getFunc();
}
public Funcionario pesqFuncs(int id){
    return this.funcs[id].pesqFunc(this.funcs);
}
(...)
CLASSE FUNCIONARIO:
class Funcionario{
    private int id;
    private String nome;
    private String snome;
    private String rg;
    private String setor;
    private double salario;
    public Data dtCadastro;

    public void setFunc(tempFunc novoFunc){
        this.id = novoFunc.id;
        this.nome = novoFunc.nome;
        this.snome = novoFunc.snome;
        this.rg = novoFunc.rg;
        this.setor = novoFunc.setor;
        this.salario = novoFunc.salario;
        this.dtCadastro = novoFunc.dtCadastro;
    }
    public void getFunc(){

        System.out.println("-----------------------------------------");
        System.out.println("--CADASTRO DE FUNCIONARIO----------------");
        System.out.println("-----------------------------------------");
        System.out.println("FUNC ID: "+this.id);
        System.out.println("NOME: "+this.nome+" "+this.snome);
        System.out.println("DOC: "+this.rg);
        System.out.println("SETOR: "+this.setor);
        System.out.println("SALARIO: R$"+this.salario);
        System.out.println("DATA CAD: "+this.dtCadastro.formatData());
        System.out.println("-----------------------------------------");
        System.out.println("------CADASTRO EFETUADO COM SUCESSO------");
        System.out.println("-----------------------------------------");
        System.out.println("");
    }

    public void pesqFunc(Funcionario[] lista){
        boolean res = false;
        for(int i = 0;i < lista.length;i++){
            if(lista[i] == null) continue;
            if(lista[i].nome == this.nome){
                res = true;
            }
        }
        if(res){
            System.out.println("---------------------------------------------------------------");
            System.out.println("--PESQUISA DE FUNCIONARIO--------------------------------------");
            System.out.println("---------------------------------------------------------------");
            System.out.println("CADASTRO DO FUNCIONARIO "+this.nome+" "+this.snome+" ENCONTRADO");
            System.out.println("---------------------------------------------------------------");
            System.out.println("");
        }else{
            System.out.println("---------------------------------------------------------------");
            System.out.println("--PESQUISA DE FUNCIONARIO--------------------------------------");
            System.out.println("---------------------------------------------------------------");
            System.out.println("CADASTRO DO FUNCIONARIO "+this.nome+" "+this.snome+" NÃO ENCONTRADO");
            System.out.println("---------------------------------------------------------------");
            System.out.println("");
        }
    }    
}

Conforme o código acima, chamei os metodos getFunc e pesqFunc (da classe FUNCIONARIOS) pelos metodos getFuncs e pesqFuncs (da classe EMPRESA), mas em ambos os casos estou com erro no return:

incompatible types: void cannot be converted to Funcionario

Como devo declarar os metodos dentro de cada classe para que retornem as strings?

Valeu pela força!

6 respostas

Oi Diogo,

O problema está acontecendo pois os dois métodos

public Funcionario getFuncs(int id){
    return this.funcs[id].getFunc();
}
public Funcionario pesqFuncs(int id){
    return this.funcs[id].pesqFunc(this.funcs);
}

estão retornando um objeto do tipo funcionário, porém o seu return está trazendo o resultado da função getFun() e pesqFunc(), e ambas as funções são void, ou seja, não retornam nenhum objeto.

Bom, alterei os metodos da classe EMPRESA para void e alterei os returns:

public void getFuncs(int id){
    this.funcs[id].getFunc();
}
public void pesqFuncs(int id){
    this.funcs[id].pesqFunc(this.funcs);
}

Compilou. Mas não sei se está correto com a proposta do exercício.

Então Diogo, acredito que não está... creio que o mais correto seria:

public Funcionario getFuncs(int id){
    return this.funcs[id];
}

Pois você está retornando o funcionário, ou seja, objeto funcionário, agora, a pesqFuncspode estar correta, pois, acredito eu, que ela funciona como a mostrado exemplo, então acredito que esteja certa sim.

Então eu preciso tranferir os Println para uma nova classe dentro de EMPRESA, chamar a getFuncs, usar o resultado para exibir as informações e a getFunc (FUNCIONARIOS) apenas retorna os dados solicitados? Quando vai e vem!

solução!

Então, Diogo, o getFuncs, não necessariamente tem que retornar as informações do Funcionário, ele pode retornar um objeto funcionario, e onde você estiver implementando sim usar para puxar alguma informação.

Essa foi a minha implementação de Funcionario:

class Funcionario{
    private String nome;
    private String departamento;
    private double salario;
    private Data dataEntrada = new Data();
    private String rg;

    public void setNome(String n){
        this.nome = n;
    }
    public String getNome(){
        return this.nome;
    }

    public void setDepartamento(String dep){
        this.departamento = dep;
    }

    public String getDepartamento(){
        return this.departamento;
    }

    public void setSalario(double valor){
        this.salario = valor;
    }

    public double getSalario(){
        return this.salario;
    }

    public void setData(Data d){
        this.dataEntrada = d;
    }

    public Data getData(){
        return this.dataEntrada;
    }

    public void setRg(String r){
        this.rg = r;
    }

    public String getRg(){
        return this.rg;
    }

    public void recebeAumento(double aumento){
        this.salario += aumento;
    }

    public double getGanhoAnual(){
        return this.salario * 12;
    }

    public double somaDecimoTerceiro(){
        return this.getGanhoAnual() + this.salario;
    }

    public void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salario: "+ this.salario);
        System.out.println("Data de Entrada: " + this.dataEntrada);
        System.out.println("RG: " + this.rg);

        System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
    }
}

e essa foi a implementação de empresa:

public class Empresa {
    private Funcionario[] funcionarios;
    private String nome;
    private String cnpj;
    private int livre = 0;

    public String getNome() {
        return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCnpj() {
        return this.cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public Funcionario getFuncionario(int posicao) {
        return this.funcionarios[posicao];
    }
}

Se você reparar bem, eu não chamo método algum de Funcionario aqui, na classe que você for implementar um main utilizado a empresa, ela vai pegar o funcionário da empresa e aí sim fazer o uso dele.

Ahh... agora entendi a parada! kkk Valeu mesmo Joel!