日期:2014-05-20  浏览次数:20639 次

getter,setter问题
通过学习知道,要想取得一个类中 private 属性的成员变量,需要使用 setter 和 getter 方法设置并获取该变量,例如:


private int a;
public void setA(int _a)
{
    a = _a;
}
public int getA()
{
    return a;
}

但是这样写两个方法,没有人觉得很麻烦吗?为何不这样:

private int a;
public int setAndGetA(int _a)
{
    a = _a;
    return a;
}

像这样,把两个方法合并,不是一样可以的吗?

求大神解答~~

------解决方案--------------------

private int a;
public int setAndGetA(int _a)
{
    a = _a;
    return a;
}
 要获取值时,需要先传递值给它,然后再把它拿出来,何必呢?
------解决方案--------------------
set,get方法可以用编辑器直接生成,这是java规范规定的。

至于你的建议的话,这好像不太好。你这方法作为set没有问题,但是如果我只是想get,你说我传什么参数呢?
另外如果有些属性是只读/只写的,怎么办呢?

其实如果java规范规定成这样还是有可能的。

private int a{
 public set(int _a)
 {
    a = _a;
 }
 public get()
 {
    return a;
 }
};

纯属个人意见,呵呵。
------解决方案--------------------
引用:
但是使用setter和getter方法不是一样要先给它赋一个值,然后再取得这个值吗?
并且还得两个调用...
这个a值是在别的地方赋的,到这里取a值,这时
public int getA()
{
    return a;
}
 就可以了,并不是set 和 get必须一起联合使用
------解决方案--------------------
有些类的属性,它创建后就不可再修改,这时,类就无需开放set方法了,直接开放get方法就可以了,可以拿到属性值。get set 看类的设计吧,灵活使用。
------解决方案--------------------
按需所用,节约资源
ps:查看API可以提高对各个关键字的理解
------解决方案--------------------
你每次get之前都要set吗?我只想get怎么办?
------解决方案--------------------
因为set/get设置的是:
一个传入值(传入参数),
一个取值(不用传参数)。

这样的好处是,分离了设置与取值。也可以在另外一个地方设置值,然后再另外一个地方取值。

个人看法。
------解决方案--------------------
引用:
你每次get之前都要set吗?我只想get怎么办?


也可以啊,



//只取值不设置

public class Test{

  private String message ; //消息.
  private static double version = 1.0 ;
  
  public double getVersion(){
      return version ;
  }

  // 假设聊天信息,预知消息是不可能的吧?这时候set/get就很有用了.
  public void setMessage(String message){
     this.message=message;
  }
  
  public String getMessage(){
     return message;
  }

}

------解决方案--------------------
我只想get,我传什么参数?求告知。
------解决方案--------------------
引用:
但是使用setter和getter方法不是一样要先给它赋一个值,然后再取得这个值吗?
并且还得两个调用...


这是个思路问题,getter就是用来去数据,setter就是用来传数据 。这样把传和取两个动作分离出来。
-----------
例如:
就好比一个银行,本来就是把存和取这2个动作分离开来,
存钱的人只负责存,取钱的只负责取,
即便是一个人同时要办存取2件事,也有个先存后取、先取后存的顺序,
只有区分了的存取事项,并按照一定的顺序,
这样,银行的业务执行者才知道来办事的人到底要干嘛 。
所以,银行的执行者一看到set就知道要存,一看到get就知道要取
-----------
来看看你这个思路:

public int set(int a){
   _a = a    ;
   return _a ;
}

这个程序是你自己写的,但是,我们来分析下:
你来到工商银行,存了100元,与此同时,在存的同时又把100取掉!你这个有意义?
你这样还不如不要去银行 ... 
但如果按照平常的setter/getter思路
你先set(100);//表示今天有闲钱,存100
然后i = get();//表示:不一定是今天,总之就是在某一时刻,突然经济紧张了,又取出之前存的100元。
这样写,程序不就有意义了?
呵呵,你说是吧?
------解决方案--------------------
我来吧,lz给你举个通俗的例子(刚想到的):
private修饰的变量可以看做你的存折,set方法是,自己或别人给你存折上打钱,你想想这可是存折额,涉及到隐私,你愿意把存折上还剩多少钱给别人看嘛,按你的想法,别人给我打钱,我就把余额告诉它嘛。分成set、get多好,我想给别人看存折余额,就给别人开放一个方法getter,不想让别人看,就不写getter方法,
lz你觉得能明白了不
------解决方案--------------------
引用:
set,get方法可以用编辑器直接生成,这是java规范规定的。

至于你的建议的话,这好像不太好。你这方法作为set没有问题,但是如果我只是想get,你说我传什么参数呢?
另外如果有些属性是只读/只写的,怎么办呢?

其实如果java规范规定成这样还是有可能的。

private int a{
 public set(int _a)
 {
    a = _a;