有什么理由我不应该使用setter而不是“super”和“this”来在扩展类中创建默认对象?
示例
public class Foo{
private String foo;
public Foo(){
}
public Foo(String foo){
this.foo = foo;
}
public void setFoo(String foo){
this.foo = foo;
}
扩展类使用“this”创建一个带有预设String foo的Bar。
public class Bar extends Foo{
public Bar(String foo){
super(foo);
}
public Bar(){
this("foobar");
}
}
使用setter创建带有预设String foo的Bar的扩展类。
public class Bar extends Foo{
public Bar(){
setFoo("foobar");
}
}
据我所知,他们都有相同的结果。 有没有理由为此目的使用setter?
答案 0 :(得分:1)
在我看来,使用setter初始化并不是一个好习惯,它会降低代码的可读性和耦合度。如果使用setter进行初始化,那么读取constuctor代码的人还需要读取setter中的代码,以确保没有任何意外情况发生。此外,如果某人需要向setter添加一些额外的代码,她将需要检查代码对构造函数的影响。