本篇文章给大家分享的是有关Java中值对象的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
值类型与值对象
equals()
和
hashCode
方法即可;对于可变性问题,可以将对象设计为不可变对象,在修改时返回一个深拷贝副本来供客户端操作。满足上述两种条件的对象,我们可以称之为值对象。不同编程语言对值类型的支持
Submitted
阶段(JEP 提案从提出到发布的流程有几个阶段,可以看
这里
[8]
Process states 一节),能否被采纳、实现乃至发布到正式版本,还是未知之数。A a;
的方式创建的对象是分配在栈上的,而通过
new A();
的方式创建的对象分配在堆上,并且返回一个指向该对象的指针。在栈上创建的对象在函数执行结束时会自动销毁。DDD 中的值对象
使用值对象的好处
任何使用到值对象的地方,它的状态始终是合法的。通常不可变对象会在创建时进行自校验,因此一旦创建完成,它始终处于合法有效的状态之中,没有任何行为能使破坏它的一致性状态。
可以安全的共享给其它对象、其它线程,而不用担心状态发生变化,简化了代码维护者对流程、逻辑的理解。
值对象 Java 实践
尽可能使用不可变对象作为构建对象的组件;
必要时对构造方法参数和方法返回值进行防御性拷贝:(第 6、7、14、18 行)
进行防御性拷贝应在参数检查之前执行,以避免参数检查可拷贝期间受其它线程对参数更改的影响。
必要时,对实现 serializable 接口的类进行反序列化重写 readObject 方法,以避免字节码攻击。对于这一点,简单来讲就是由于 Java 对象的反序列默认通过 readObject 方法重建对象,而不会调用我们提供的构造方法,这使得攻击者可以通过修改字节码数据,从而绕开构造方法中的参数校验的防御性拷贝。具体可以看 《Effective Java 第三版》 第 88 条 保护性的编写 readObject 方法。
of()
静态工厂方法上面,同时将构造方法设为 private。通过查看生成的代码,发现 builder 的
build()
方法直接调用了该工厂方法。以上就是Java中值对象的作用是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。