面向对象编程的核心租户是封装:不应允许调用者直接访问类的字段。这是新的语言,包括Kotlin,Swift和Ceylon,已经很好地解决了一流的属性。
Java没有第一类属性的概念。相反,JavaBeans规范是作为Java执行封装的方法引入的。编写JavaBeans意味着您需要将类的字段设置为私有,仅通过getter和setter方法公开它们。
如果你像我一样,你在编写JavaBeans时经常会感觉到你正在编写一堆很少用于任何实际目的的理论样板。我的大多数JavaBeans都包含私有字段及其相应的getter和setter,它们只能获取和设置这些私有字段。不止一次,我一直试图简单地将这些领域公之于众,并免除了getter / setter的大肆宣传,至少在IDE发出严厉的警告后,我的双腿之间的尾巴,以及JavaBeans标准。
但是,最近,我意识到封装和JavaBean / getter / setter模式在常见场景中非常有用:集合类型字段。怎么会这样?让我们编写一个简单的类:
公共 类 MyClass {
private List < String > myStrings ;
}
我们有一个字段 - 一个字符串列表 - 调用 myStrings
,它被封装在中MyClass
。现在,我们需要提供访问器方法:
公共 类 MyClass {
private List < String > myStrings ;
public void setMyStrings(List < String > s){
这个。myStrings = s ;
}
public List < String > getMyStrings(){
归还 这个。myStrings ;
}
}
在这里,我们有一个适当封装的 - 如果不是详细的 - 类。所以我们做得很好,对吗?坚持这个想法。
可选课程
考虑在Java 8中引入的Optional类。如果你已经使用Optionals做了很多工作,你可能听说过你应该永远不会null
从返回Optional的方法返回的咒语 。为什么?考虑以下人为的例子:
公共 课 Foo {
私人 字符串 栏 ;
public 可选< String > getBar(){
return(bar == null)? null:可选。的(巴);
}