Pergunta dificil de explicar sobre métodos

5 respostas
vinians

Amigos, vejam a seguinte situação:

class Test extends Object {
   private int x;
   public getX() {return x;}
   publit  setX(int _x) {x = _x;}
}

Como voces podem ver, nada de especial. Porem eu gostaria de saber se tem como manter o “private x” mas de forma que os usuários da minha classe não precisem de usar o getX() ou seja se eu pudesse mapear alguma variavel que automaticamente chamasse os gets e sets. Algo como o property do delphi… Isso evitaria que eu precisasse usar o setX() e getX() em uma exepressão complexa e facilitaria o entendimento de quem le a expressão. Por exemplo supondo que um outro identificador por exemplo xx e yy pudesse ser usado no lugar dos métodos get e set. Veja:

import Test;
public static void main(String[] args)
{
   new Test() {
      setX(10); 
      setY(20);
      int z = getX() * getY() + (getY() * getY());
      System.out.println("%d", z);
  }
  //seria assim
 new Test() {
    xx = 10;
    yy = 20;
    int z = xx * yy + (yy * yy); // xx acessaria o método getX() automaticamente
    System.out.println("%d", z);
 }
}

Esperam que tenham entendido o que eu estou dizendo. Obrigado!

5 Respostas

nel

Não tem.

Por isso falamos em “encapsulamento”. Somente se você alterar o modificar de private para outro ou passar a usar reflection, o que tornaria mais complicado ainda.
Não vejo absolutamente nenhum problema em usar os famosos getters e setters.

vinians

nel:
Não tem.

Por isso falamos em “encapsulamento”. Somente se você alterar o modificar de private para outro ou passar a usar reflection, o que tornaria mais complicado ainda.
Não vejo absolutamente nenhum problema em usar os famosos getters e setters.


Também não vejo problemas com o encapsulamento, na verdade minha pergunta é justamente porque quero mante-lo! Mas eu preciso expor uma interface na qual o usuario possa acessar uma variavel encapsulada co private sem usar diretamente o método público. Eu creio que o java não tenha algo desse tipo, nesse caso continuarei usando os getters e setters pois não posso expor as variáveis diretamente, entretanto se tiver algo parecido com o que eu falei gostaria de saber.

R

No máximo é trocar os atributos private por protected para quem herdar poder acessar o atributo diretamente.

Jhonny_Oliveira

Acho que o que você está tentando idealizar é como as propriedades do C#, como no código a seguir não é?

public sealed class Filial
    {
        private int     _codigo;
        private string  _razaoSocial;
        private string  _nomeFantasia;
        private string  _cnpj;
        private int     _numeroRegiao;

        public Filial(int codigo)
        {
            this._codigo = codigo;
        }

        public int Codigo
        {
            set
            {
                this._codigo = value;
            }
            get
            {
                return this._codigo;
            }
        }

        public string RazaoSocial
        {
            set
            {
                this._razaoSocial = value;
            }

            get
            {
                return this._razaoSocial;
            }
        }

        public string NomeFantasia
        {
            set
            {
                this._nomeFantasia = value;
            }

            get
            {
                return this._nomeFantasia;
            }
        }

        public string CNPJ
        {
            set
            {
                this._cnpj = value;
            }

            get
            {
                return this._cnpj;
            }
        }

        public int NumeroRegiao
        {
            set
            {
                this._numeroRegiao = value;
            }

            get
            {
                return this._numeroRegiao;
            }
        }

        public override string ToString()
        {
            return this._codigo.ToString();
        }

    }
}

Até agora no Java acho que não temos um recurso como esse, mas também não vejo nada de mal com os famosos getters e setters.

douglaskd

é amigo…

não existe mesmo

essa property é associada ao método…ela tem que ter os parenteses() no java…

“ainda” não existe nenhuma forma no java de fazer isso…

teria que ser…vamos dizer… um ponteiro para um método…

Criado 13 de abril de 2012
Ultima resposta 13 de abr. de 2012
Respostas 5
Participantes 5