Método set() envia valor porém get() retorna nulo?

18 respostas
javaprogramação
Edson_Reis

Meu Model Esquema

public class Esquema {
        private int goleiro;
        private Atleta goleiroobj;


        public Esquema()
        {


        }

        public Atleta getGoleiroobj() {
            return goleiroobj;
        }

        public void setGoleiroobj(Atleta goleiroobj) {
            this.goleiroobj = goleiroobj;
        }


        public int getGoleiro() {
            return goleiro;
        }

        public void setGoleiro(int goleiro) {
            this.goleiro = goleiro;
        }
    }

Meu Model Atletas

public class Atleta {
        public String apelido;
        public int atleta_id;

        public Atleta() {

        }

        public Atleta(String apelido, int atleta_id)
        {
            this.apelido = apelido;
            this.atleta_id = atleta_id;
        }

        public String getApelido() {
            return apelido;
        }

        public void setApelido(String apelido) {
            this.apelido = apelido;
        }

        public int getAtletaId() {
        return atleta_id;
        }

        public void setAtletaId(int atleta_id) {
        this.atleta_id = atleta_id;
        }


    }

Meu Fragment onde é passo a viewHolder

public class EsquemaTaticoFragment extends Fragment {

    private static Context context;
    private static final String TAG = "aaa";
    private static View view;

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.fragment_esquema_tatico, null);

            Esquema esquema = new Esquema();
            view.findViewById(R.id.esquema_tatico_433).setVisibility(View.VISIBLE);


           View view433_default = view.findViewById(R.id.esquema_tatico_433).getRootView();
           EsquemaTaticoViewHolder evh433_default = new EsquemaTaticoViewHolder(view433_default,esquema);

            setHasOptionsMenu(true);
            return view;
        }

}

Minha viewHolder

public class EsquemaTaticoViewHolder {
    
    private LinearLayout lay_goleiro;
    private TextView nome_goleiro;

    public EsquemaTaticoViewHolder() {

    }

    public EsquemaTaticoViewHolder(View view, Esquema esquema) {


        nome_goleiro = (TextView) view.findViewById(R.id.nome_goleiro);
        lay_goleiro = (LinearLayout) view.findViewById(R.id.lay_goleiro);


        nome_goleiro.setText(esquema.getGoleiroobj().apelido);
        if(esquema.getGoleiro() > 0){
            nome_goleiro.setText(esquema.getGoleiroobj().apelido);
            lay_goleiro.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

        }



    }

}

Helper 1

private static  Esquema getEsquemaOrganize(Atleta atleta, Esquema esquema) {
        switch (atleta.getPosicaoId()) {
            //GOLEIRO
            case 1:
                esquema.setGoleiro(atleta.atleta_id);
                esquema.setGoleiroobj(MercadoManager.getAtleta(esquema.getGoleiro()));
                break;
        }
        return esquema;
    }

Helper 2

public static Atleta getAtleta(int id)
    {
        Atleta atleta =new Atleta();
        for (int i = 0; i <atletas.size(); i++) {
            if (atletas.get(i).atleta_id == id)
            {
                atleta = atletas.get(i);
                break;
            }
        }
        return atleta;
    }

18 Respostas

drsmachado

E desde quando método setter retorna algo diferente de void?

igor_ks

Método get() envia valor porém set() retorna nulo

Oi? Os métodos get() que traduzindo do ingles para o portugues, significa “obter, adquirir” e os métodos set() significa “por, colocar” . Ou seja, os métodos getters pegam valores e os setters atribuem valores.

Nao entendi sua dúvida

Dragoon

Quando o Design Pattern utilizado foi Builder ou Fluent Builder é a um forma que não é void é sim a própria classe.

http://stefanteixeira.com.br/2015/07/29/design-patterns-para-melhorar-seus-testes-parte-1-builder-fluent-interfaces/

Dragoon

Quando o Design Pattern utilizado foi Builder ou Fluent Builder é a um forma que não é void é sim a própria classe.

Ou seja, existe uma possibilidade aonde o método set retorna valor em que eu possa encadear métodos!

http://stefanteixeira.com.br/2015/07/29/design-patterns-para-melhorar-seus-testes-parte-1-builder-fluent-interfaces/

Dragoon

Você está tentando utilizar o Builder ou Fluent Builder, é o que precisa fazer?

Percebi que nos seus métodos get está retornando um valor da própria classe que dá erros e tem problemas de conceito. Se for métodos do Design Patterns citados é diferente a implementação.

lvbarbosa
  1. O método set ou o setter geralmente não tem retorno, afinal é uma ação, e não uma query. Para obter o retorno, utilize o getter;

  2. Esse construtor é totalmente desnecessário. A única linha que faz algo relevante é RestoAtletas = new ArrayList<Atleta>();, pois os boolean são automaticamente inicializados para false, e as referências inicializadas para null;

  3. Você provavelmente está começando agora com OO, por isso ainda está pensando de forma procedural. Que tal, ao invés desse monte de referências dentro de uma classe só, compor a classe Esquema com classes de granularidade só um pouco menor que ela? Por exemplo:

    1. A classe Esquema pode ter variáveis dos tipos Lateral, MeioCampo, Ataque, etc.
    2. Cada um desses sub-objetos pode ter subtipos diferentes, como LateralDireita, e coisas do gênero.
    3. No final, os métodos da classe Esquema podem derivar informações (como o esquema em formato numérico, tipo 3-4-3) apenas consultando seus membros e combinando suas informações.
Dragoon

Essa afirmação é errada!!!

Quando o Design Pattern utilizado foi Builder ou Fluent Builder é a um forma que não é void é sim a própria classe.

Ou seja, existe uma possibilidade aonde o método set retorna valor em que eu possa encadear métodos!

http://stefanteixeira.com.br/2015/07/29/design-patterns-para-melhorar-seus-testes-parte-1-builder-fluent-interfaces/

drsmachado

Pela classe que ele colocou como exemplo, claramente não está utilizando nenhum pattern:

public void setGoleiroobj(Atleta goleiroobj) {
    this.goleiroobj = goleiroobj;
}
lvbarbosa

O método set ou o setter geralmente não tem retorno, afinal é uma ação, e não uma query. Para obter o retorno, utilize o getter.

Geralmente.

Dragoon

Ele inverteu o Pattern, ou copiou, ou não sabe o que está fazendo, mas, a sua pergunta foi respondida!

Dragoon

Veja Ivbarbosa é um erro falar assim entendeu.

A suas duas outras afirmações Ok! Concordo

lvbarbosa

Você ainda não viu o geralmente? kkkkkkkkkkk

Eu sei muito bem como funciona um builder e a questão de “fluent interfaces” pra simular uma DSL. Só não acho que isso seja muito relevante pra um cara que tá aparentemente começando e não entendeu para que servem getters e setters.

Dragoon

Tudo bem @Ivbarbosa, mas, é relevante para outras pessoas, não é só uma resposta mas, uma afirmação que não condiz com toda a realidade de programação, não duvido que você não saiba, só estou apontando um problema na sua afirmação que um geralmente poderia ser somente apagado e refeito o item 1.

lvbarbosa

Entendi. Obrigado!

igor_ks

Eu ainda acho que: se o cara for usar o padrão builder, não deve usar o set como nomenclatura, por mais que retorne this. Getters e Setters tem um propósito e deve ser seguido, assim como builder tem outro propósito e também deve ser seguido as boas práticas

Normalmente os builders são apenas o nome do atributo. Ex: new Pessoa(“Jose”).sobrenome(“Silva”).idade(21).build(); e não new Pessoa(“Jose”).setSobrenome(“Silva”).setIdade(21).build()

EDIT: E outra, a dúvida do criador do tópico pareceu mais confusao de getters e setters que iniciante têm, do que uma tentativa de implementar um builder

Dragoon

Opa @igor_ks eu não sei como Java FAZ ISSO, sou conhecedor de POO, que em modo geral é a mesma coisa (talvez PHP mude muito essa interpretação), mas, nos exemplos que eu peguei alguns tem a nomenclatura de set , outros add e outros como você fez na afirmação. Acredito que basicamente para métodos Fluent deve ter alguma nomenclatura, mas, não posso afirmar qual, mas, o método utilizado é setando algum valor é segue a nomenclatura set da POO, por isso da minha afirmação que um método set (que muda valor) pode retornar também valores que no caso em si é a própria instância da classe.

Mas, de um modo geral concordo que o usuário é novo no desenvolvimento POO.

Edson_Reis

perdão inverti os metodos na pergunta… arrumei a pergunta

Edson_Reis

Eu envio um valor e recebo nulo, sou iniciante em java e sei que estou cometendo um erro muito simples

Criado 16 de março de 2017
Ultima resposta 16 de mar. de 2017
Respostas 18
Participantes 5