我们需要getter和setter方法么?

来源:互联网 发布:oceanbase数据库的缺点 编辑:程序博客网 时间:2024/04/29 19:13

在日常工作中,Java是我最频繁使用的语言。关于getter和setter我也听说过不少。我的感觉是在许多场合,我们不需要getter和setter方法。

回想一下我们写JavaBean,创建一个类,然后编写一些private字段,最后使用一个smart IDE帮助我们生成对应的getter和setter方法(或者使用某个第三方类库的annotation)。但是让我们仔细的想一下,我们是怎样使用这些字段的,换句话说,我们为什么一上来就把字段写成了private?

我把字段的访问分为四种:

  1. 只读不写
    这个很好理解,就像immutable类型。在这个时候,我觉得字段可以定义为public final类型,然后只在构造中对其赋值就可以。
  2. 只写不读
    这个时候该字段可能被用来计算其它的东西,这个时候如果该字段不能对外暴露,则应该将字段定义为private,然后仅提供一个public的getter方法。
  3. 又写又读
    这个完全可以使用一个public字段,直接使用即可。
  4. 不读不写
    这是一种不存在的情况。

从上面的描述可以看出,除了第二种情况外,其它对字段的读写操作完全不需要getter和setter方法的存在。

其实这个问题很好理解,当我们将字段定义为private时,本身是想要把这些字段封装起来,不希望外界对这些字段直接进行读和写。但是,完全不被外界所用的字段是没有必要存在的,因此,这些被封装的字段总会通过某种方式由外界输入或者输出给外界,这里所说的“某种方式”指的是在对这些字段读取或赋值之前,进行某些计算。如果单纯的将private字段通过getter和setter方法暴露给外界,和直接把字段定义为public没有任何的区别。

因此,我个人认为,纯粹的getter和setter方法是完全没有必要存在的。这些方法不但非常麻烦,而且还会影响开发的效率。想想如果某个JavaBean有很多的字段该怎么办?也许IDE可以帮助我们,那么测试覆盖率呢?我们应该关注它们的测试覆盖率么?

 

所以getter和setter,还是省省吧!

原创粉丝点击