04-17.eri-test Java Java中的不变性变得容易

ŤHearticlewas在itiallypublisHedatcarlØscHac。in

ØckquØte>

也可以看看:

☕️一成不变的s/AutoValue/大号ombok🔥WhichOne?

CarlosChacin☕👽・Apr13・5minread

#java #bestpractices #immutability

InEffectiveJava,JoshuaBlochmakesthefollowingrecommendation:

除非有充分的理由使它们可变,否则类应该是不可变的。如果不能使一个类不可变,则应尽可能限制其可变性。

🔩一成不变的宾语s

如果对象在构造后无法改变,则认为该对象是不可变的。对不可变对象的最大依赖被广泛认为是创建简单,可靠代码的合理策略。reference

  • Immutableobjectsareconstructedonce,inaconsistentstate,andcanbesafelyshared
    • Willfail如果mandatory属性aremissing
    • Cannotbesneakilymod如果iedwhenpassedtoothercode
  • Immutableobjectsarenaturallythread-safeandcanthere对于ebesafelysharedamongthreads
    • Noexcessivecopying
    • Noexcessivesynchronization
  • 宾语definitionsarepleasanttowriteandread
    • Noboilerplatesetterand得到ters
    • NouglyIDE-generated杂凑Code等于andto串methodsthatendupbeingstoredinsourcecontrol。reference

🔧大号et'sconvertamutableobject整型oanimmutableone(byhand✋):

ŤhefollowingclassiswhatweusuallycallPOJOorJavaBean:

进口java。util。日期;进口java。util。清单;进口java。util。对象;上市class旧模型{私人的串领域A;私人的日期领域B;私人的长领域C;私人的清单和lt;串和gt;领域;上市旧模型(){}上市串得到FieldA(){返回领域A;}上市虚空setFieldA(串领域A){这个。领域A=领域A;}上市日期getFieldB(){返回领域B;}上市虚空setFieldB(日期领域B){这个。领域B=领域B;}上市长getFieldC(){返回领域C;}上市虚空setFieldC(长领域C){这个。领域C=领域C;}上市清单和lt;串和gt;getFieldD(){返回领域;}上市虚空setFieldD(清单和lt;串和gt;领域){这个。领域=领域;}@Override上市串to串(){返回“旧模型{”+“领域A='”+领域A+'\''+“,领域B=”+领域B+“,领域C=”+领域C+“,field=”+领域+'}';}@Override上市布尔值等于(宾语o){如果(这个==o)返回真正;如果(o==空值||getClass()!=o。getClass())返回假;旧模型旧模型=(旧模型)o;返回对象。等于(getFieldA(),旧模型。getFieldA())&&对象。等于(getFieldB(),旧模型。getFieldB())&&对象。等于(getFieldC(),旧模型。getFieldC())&&对象。等于(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值