不解为何java bean把成员变量设为私有,却提供了get,set方法

RT, 我经常是把成员变量设为public,感觉这样处理起来更方便。

用java多年了,这个小问题一直困扰着我。

private 目的是私有, 是不让别人用, get/set方法目的是让别人用. 这岂不矛盾了?
你说的是这个问题吧.
是这样的.private 是不让别人用, public 是让别人用, 但是有一种需求是让有的人用而让另外一些人不能用. 这时private/public的功能就出现短板了. 这时就有了set/get方法的用武之地了. 我们可以在set/get方法是设置, 如下:
public set(某某某){
if(你是一些人){
你可以设置
}else{
对不起, 你没有设置的权限.
}
}
可以说: get/set+private 的功能完全包含了private/public 的功能. 所以这也成了一种编程的习惯. 为什么张三会刀枪剑戟, 李四只会刀枪, 我要用李四而不用张三呢?

举个列子:
[code="java"]
private String name;

public String getName(String name){
return name;
}
[/code]
这样当有特殊需求的时候可以只改getName方法即可。
比如,我要求所有叫jack的都返回空串。
是不是只要变成
return “jack”.euqals(name)?"":name;
并且只要改这一处地方。
这样更符合面向对象的特性。
上面只是个简单的字符串,如果是对象则用途更广了。
比如spring IOC,用get set注入对象。
反射调用这些方法能完成很多事情,比如在set之前先判断一下日志有没有开启。
AOP的拦截不都是基于方法的么?
当然,get/set也不是绝对的,具体场景具体应用吧,不要为了get/set而get/set。

[code="java"]我对这个问题的看法: 我们不能单纯地从实现的角度去考虑这个问题,因为条条大路通罗马,但肯定付出不相同的,我们应该提升我们的编程思想(这也正是程序员coder所缺泛的),楼主所说的问题是一个典型的面象对象思想中的封装性,而非java所特有,所有面象对象的语言都应该对自己的属性进行(set/get),面向对象,看什么是对象? 对象就是属性+行为,封装就是把对象的私有属性封装起来,只有通过自己公开的行为去改变(获得)对象内部的私有属性信息,而那些public的方法正是面其它对向的接口,你只有通过接口去改变(获得)对象的私有属性[/code]

就是要敢于创新才对嘛,spring的ioc 两种注入都有,属性注入和方法注入
使用set和get 对成员变量进行了封装
set 和get能根据自己的规则来,拿到的数据,和注入的数据都是有效地
当然我觉得po这样来确实挺麻烦
set和get是一种规范,大家都这样做了,所以就这样了,编程不就是各种规范么