Java 封装良好实践

Java 封装良好实践,java,encapsulation,Java,Encapsulation,可能重复: 最近我遇到了一种情况,我将一个类变量声明为public,因为它将在另一个类中使用。最近有人告诉我,我应该将这些变量设置为私有,并编写一个公共方法返回变量的值。有人告诉我这是个好习惯。我翻遍了我的Java书,找不到任何与此相关的参考资料。我的问题是,将尽可能多的类变量声明为私有是否是一种好的做法?是的。通常,所有变量都应该是私有的(不受保护的,私有的),并且应该有方法来获取它们的值(并可能设置它们),如果(并且仅当)您希望外部人员允许这样做。您使用的变量是一个实现细节,通常包含必须以

可能重复:


最近我遇到了一种情况,我将一个类变量声明为public,因为它将在另一个类中使用。最近有人告诉我,我应该将这些变量设置为私有,并编写一个公共方法返回变量的值。有人告诉我这是个好习惯。我翻遍了我的Java书,找不到任何与此相关的参考资料。我的问题是,将尽可能多的类变量声明为私有是否是一种好的做法?

是的。通常,所有变量都应该是私有的(不受保护的,私有的),并且应该有方法来获取它们的值(并可能设置它们),如果(并且仅当)您希望外部人员允许这样做。您使用的变量是一个实现细节,通常包含必须以某种方式保存的数据。getter和setter允许您对数据负责、验证数据、同步数据等,而不是让一些傻瓜在其中存储随机内容,从而可能使您的对象无法使用


唯一的例外可能是类,它们的唯一用途是存储数据,这样您就可以将数据作为一个对象发送,有点像C/C++
struct
。但随后,您做出了一个决定,不,您不想以任何方式验证、同步、封装该数据……并且以后改变主意会破坏二进制兼容性(意味着任何涉及该类的代码都需要重新编译)。在一个小的私人项目中不是什么大事;在公共框架/API中有很多功能。

当然,我总是先声明所有功能都是私有的。大部分时间他们都是这样。这意味着更多的写作,但IDE可以帮助您。Threre的“ProjectLombok”,当您注释字段或类时,它会为您生成访问器。