编程的getter和setter有什么意义?
3个回答
展开全部
可能你觉得把变量声明成public也是一样的效果?
其实意义很多:
(1)安全性。说安全性,很多人可能不怎么明白。其实最简单的解释就是,对于一个变量,你可以只开放getter,而不开放setter,这样就做到外部只读。变量声明public是做不到这点的吧。
(2)在getter和setter中可以做其他的操作。比如在界面设计中,某个自定义控件里面放一个居中的字符串。就可以在这个字符串的setter方法里修改字符串内容之后算一下坐标以保证新的字符串还是居中显示的。
(3)“模拟存在”。比如计算人体肥满度BMI,其实在“人类”这个类里根本不保存bmi这么一个变量,而是在getBMI()的方法里面用身高和体重算出来。这样就避免了每次修改身高体重的时候都要维护bmi这么一个变量——特别是在身高体重的修改明显比getBMI()使用得频繁的时候。
(3)统一性。还是上面的例子,就算BMI用getBMI()来算,身高体重直接用变量不行么?——编程要考虑用户(其他使用这个类的人,当然也包括你自己)的方便,比如我想获取人的身高,我必须得去查查API才知道我应该直接使用 人.身高,还是从一个方法来获取他。既然有些象BMI这样模拟出来的变量存在(其实这种还算常有),那干脆把所有的变量都通过getter和setter来存取来得统一。
(4)某些框架等地方有这个需求。比如在JSP里<jsp:setProperty name="price" property="100" />,jsp在转化成java代码的时候会把这句自动变成setPrice(100);
我暂时能想到的大概就是这么多。其实光安全性和统一性的两个理由就足够了,其他的算是衍生.
其实意义很多:
(1)安全性。说安全性,很多人可能不怎么明白。其实最简单的解释就是,对于一个变量,你可以只开放getter,而不开放setter,这样就做到外部只读。变量声明public是做不到这点的吧。
(2)在getter和setter中可以做其他的操作。比如在界面设计中,某个自定义控件里面放一个居中的字符串。就可以在这个字符串的setter方法里修改字符串内容之后算一下坐标以保证新的字符串还是居中显示的。
(3)“模拟存在”。比如计算人体肥满度BMI,其实在“人类”这个类里根本不保存bmi这么一个变量,而是在getBMI()的方法里面用身高和体重算出来。这样就避免了每次修改身高体重的时候都要维护bmi这么一个变量——特别是在身高体重的修改明显比getBMI()使用得频繁的时候。
(3)统一性。还是上面的例子,就算BMI用getBMI()来算,身高体重直接用变量不行么?——编程要考虑用户(其他使用这个类的人,当然也包括你自己)的方便,比如我想获取人的身高,我必须得去查查API才知道我应该直接使用 人.身高,还是从一个方法来获取他。既然有些象BMI这样模拟出来的变量存在(其实这种还算常有),那干脆把所有的变量都通过getter和setter来存取来得统一。
(4)某些框架等地方有这个需求。比如在JSP里<jsp:setProperty name="price" property="100" />,jsp在转化成java代码的时候会把这句自动变成setPrice(100);
我暂时能想到的大概就是这么多。其实光安全性和统一性的两个理由就足够了,其他的算是衍生.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询