1.1封装的含义封装也称为信息隐藏或数据访问保护。通过暴露一个有限的访问接口,类授权外部只能通过类提供的方法(或函数)访问内部。信息或数据。公共类钱包{privateStringid;私有长创建时间;私有BigDecimal余额;私人长余额上次修改时间;//...省略其他属性...publicWallet(){this.id=IdGenerator.getInstance().generate();this.createTime=System.currentTimeMillis();this.balance=BigDecimal.ZERO;this.balanceLastModifiedTime=System.currentTimeMillis();}//注意:下面做了get方法的代码折叠,减少代码占用publicStringgetId(){returnthis.id;}publiclonggetCreateTime(){returnthis.createTime;}publicBigDecimalgetBalance(){returnthis.balance;}publiclonggetBalanceLastModifiedTime(){returnthis.balanceLastModifiedTime;}publicvoidincreaseBalance(BigDecimalincreasedAmount){if(increasedAmount.compareTo(BigDecimal.ZERO)<0){thrownewInvalidAmountException("...");}this.balance.add(increasedAmount);this.balanceLastModifiedTime=System.currentTimeMillis();}publicvoiddecreaseBalance(BigDecimaldecreasedAmount){if(减少Amount.compareTo(BigDecimal.ZERO)<0){thrownewInvalidAmountException("...");}if(decreasedAmount.compareTo(this.balance)>0){thrownewInsufficientAmountException("...");}this.balance.subtract(decreasedAmount);this.balanceLastModifiedTime=System.currentTimeMillis();}}对于上面的代码,id和createTime是程序在创建钱包时生成的,所以对用户是透明的,即:无需提供set方法。对于balance,java培训机构只有钱包数据的增减,并没有所谓的set操作。因此,只需要提供增加和减少操作。同时,balanceLastModifiedTime跟随增减操作。变化,没有设定操作。1.2实现封装的方式在编程语言中,我们使用访问控制的方式来实现封装,比如Java的public/protected/private和default来实现不同的权限设置。因此,我们说使用lombok直接在实体类上使用@Data或者直接给所有属性添加get/set方法,实际上可能是一种不好的品味。所以,如果我们习惯使用lombok插件的话,在开发的时候一定要使用level属性来控制一些特殊属性的权限。1.3封装访问控制的意思,防止不必要的属性被外界访问或修改,以达到保护的目的;如果不做控制,看似提高了代码的灵活性,但会导致不可控,java培训课程可能会导致代码可以任意修改,影响代码的可读性和可维护性。提高易用性,减少暴露的属性。调用者无需关心所有的属性及其含义,只需要调用提供的方法即可,减少了调用者的理解和学习成本。文章来源:WinstonLu
