getter,setter问题通过学习知道,要想取得一个类中 private 属性的成员变量,需要使用 setter 和 getter 方
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;
}
};
纯属个人意见,呵呵。
[解决办法]这个a值是在别的地方赋的,到这里取a值,这时
public int getA()
{
return a;
}
就可以了,并不是set 和 get必须一起联合使用
[解决办法]有些类的属性,它创建后就不可再修改,这时,类就无需开放set方法了,直接开放get方法就可以了,可以拿到属性值。get set 看类的设计吧,灵活使用。
[解决办法]按需所用,节约资源
ps:查看API可以提高对各个关键字的理解
[解决办法]你每次get之前都要set吗?我只想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,我传什么参数?求告知。
[解决办法]这是个思路问题,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你觉得能明白了不
[解决办法]这段代码什么语法??
[解决办法]这什么语法都不是,是参考c#的属性定义改编的。