java – 初始化块vs构造函数与变量初始化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 初始化块vs构造函数与变量初始化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1458字,纯文字阅读大概需要3分钟。
内容图文
![java – 初始化块vs构造函数与变量初始化](/upload/InfoBanner/zyjiaocheng/733/d73b6395956a4e2cbee1b024f4467641.jpg)
我试图以一种我永远不会做的方式清理使用初始化bloks的类的代码,我只是想知道我是否缺少一些信息.代码如下所示:
@Entity
class MyClass extends BaseClass {
@ManyToMany(fetch=FetchType.EAGER)
private Set<OherClass> others;
{
if (others == null)
others = new HashSet<OtherClass>();
}
public MyClass(){
super();
}
//getters, setters and other stuff follows
}
我认为没有理由更喜欢上面的代码:
@Entity
class MyClass extends BaseClass {
@ManyToMany(fetch=FetchType.EAGER)
private Set<OherClass> others = new HashSet<OtherClass>();
}
或这个:
@Entity
class MyClass extends BaseClass {
@ManyToMany(fetch=FetchType.EAGER)
private Set<OherClass> others;
public MyClass(){
this.others = new HashSet<OtherClass>();
}
}
我问过我的大学,但他唯一能回答的是初始化块是如何工作的以及我已经知道的其他事情.我想知道在序列化,反射,数据库持久性,注入或任何可能使代码变得必要的异常情况下,是否存在java(甚至旧的已经修复)或框架(hibernate,spring)的一些微妙的不当行为.
解决方法:
private Set<OherClass> others;
{
if (others == null)
others = new HashSet<OtherClass>();
}
上面的代码是在不理解Java语义的情况下编写的.其他== null将永远为真.因此,这只是一种非常复杂和混乱的写作方式
private Set<OherClass> others = new HashSet<OtherClass>();
Hibernate确实会在对象构造周围包含一些“魔法”,但它仍然需要从默认构造函数中获取一个实例.此时所有实例初始化程序都已运行.
更一般地说,总是喜欢立即用常量表达式初始化集合值变量,更好的是,使字段最终.对于其余的代码,这不用担心.
有了上述内容,您仍然可以打开有关如何填充集合的所有选项,这可能因构造函数而异.
内容总结
以上是互联网集市为您收集整理的java – 初始化块vs构造函数与变量初始化全部内容,希望文章能够帮你解决java – 初始化块vs构造函数与变量初始化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。