我有以下Java类:
public class MyClass{
private List<MyObject> lst;
public MyClass(){
//----Starting initial code-----
MyAdditionalObject obj=new MyAdditionalObject();
Event e= new Event()
obj.attacheEvent(e);
//----initial code end-----
lst.add(e);
}
}
将这样的初始代码放在构造函数中是不好的做法?
答案 0 :(得分:3)
如果您有重载的构造函数,请使用初始化块以避免重复代码。
public class MyClass{
private List<MyObject> lst;
//Initialization block
{
//----Starting initial code-----
MyAdditionalObject obj=new MyAdditionalObject();
Event e= new Event()
obj.attacheEvent(e);
//----initial code end-----
}
public MyClass(){...}
public MyClass(int i){...}
public MyClass(String i){...}
}
答案 1 :(得分:1)
使用构造函数初始化实例成员有两种替代方法......
第一个是实例初始化块,
{
// whatever code is needed for initialization goes here
MyAdditionalObject obj=new MyAdditionalObject();
Event e= new Event()
obj.attacheEvent(e);
}
推荐实例初始化块而不是构造函数链接的原因是
Java编译器将初始化程序块复制到每个构造函数中。 因此,这种方法可用于共享一段代码 多个构造函数。
因此,方法将更简单,并将减少垂直问题。
第二个是使用最终方法来初始化实例成员。无法在子类中重写最终方法。
示例:
class Whatever {
private varType myVar = initializeInstanceVariable();
protected final varType initializeInstanceVariable() {
// initialization code goes here
MyAdditionalObject obj=new MyAdditionalObject();
Event e= new Event()
obj.attacheEvent(e);
}
}
参考Java文档以获得答案:Initializing fields.