关于创建ADT时的表示泄露
2022/6/6 23:19:50
本文主要是介绍关于创建ADT时的表示泄露,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java是一个典型的面向对象的语言,而在解决面向对象的相关问题时,我们姑且可以认为ADT是解决问题的基本单元。一个ADT的基本属性便是immutable或mutable,与这个属性密切相关的便是笔者将要谈到的表示泄露的问题。
不妨先说immutable的ADT,既然是immutable,便是在创建完实例后便不能修改,尤其是不能被外部修改,因此我们要做到的最基本的便是在该ADT的RI中定义为private,不然若是public便能轻易的被外界调用,甚至修改,这显然对我们的程序是不安全的,应当杜绝。当然若是加上final的修饰自然更好。加上private后,外部程序想要得知一些值只能使用相应的obsever方法,返回相应的值。好,到这里我们又有了需要考虑的事情,如果需要得知的是String,int这种本身是immutable的便罢,但万一是List,Set,Map这种,我们就需要格外注意了,因为他们本身是mutable的,当我们一时没注意在observer方法中直接返回了他们的话,那外部程序便能随意对其进行修改了,这同样应当杜绝。为了避免这种情况发生,我们便需要返回一个“副本”,即是所谓的防御式拷贝,通过创建一个mutable RI的副本,然后observer方法再返回这个副本,便能到达避免表示泄露的问题。
再来说mutable的ADT,因为是mutable,自然不会像immutable那样要求那么严格,但是,如果要对其进行相应的修改操作,必须通过ADT内部的方法来实现,同样也要通过上述所说的防御式拷贝来避免程序中可能出现的隐患。
这篇关于关于创建ADT时的表示泄露的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行