《Effective Java》条款16:只在类中使用访问方法,不在公共域中使用1.问题有时候我们需要定义一些类,用来集中实例字段(数据在Java对象)。通常我们将这些数据字段声明为公共的,可以直接访问。这样,公共类暴露了它的数据域,有以下两个缺点:1.以后不可能改变它的内部表示,因为公共类的客户端代码已经遍地开花。2.分析classPoint{publicdoublex;公共双y;}上面的数据字段可以直接访问,不提供封装功能,我们应该替换classPoint{privatedoublex;私人双y;公共点(双x,双y){this.x=x;这个.y=y;}publicdoublegetX(){返回x;}publicdoublegetY(){返回y;公共类不应该直接公开数据字段,如果一个类是包私有的,或者是一个私有的嵌套类,那么直接公开它的数据字段。如果公共类想要公开其数据字段怎么办?数据字段可以设置为不可变的,如下例所示:publicclassTime{privatestaticfinalintHOURS_PER_DAY=24;privatestaticfinalintMINUTES_PER_HOUR=60;公开最后一小时;公开最后一分钟;publicTime(inthour,intminute){if(hour<0||hour>=HOURS_PER_DAY){thrownewIllegalArgumentException("Hour:"+hour);}}if(minute<0||minute>=MINUTES_PER_HOUR){thrownewIllegalArgumentException("Min:"+minute);}this.hour=小时;this.minute=分钟;}}此类确保每个实例代表一个有效时间。三。总结简而言之,公共类永远不应该公开可变字段。
