kpi*_*pie 14 java setter coding-style
我已经写了近一年的Java了,我已经看到了两种不同的约定,用于人们如何实现他们的setter.
为了说明这一点,以下是两种惯例的示例.(我也很想知道这两个模式的简洁名称)
使用第一个约定的类,不返回其"set"方法.像这样:
public class Classic{
private double _x;
private double _y;
public Classic(){
x = 0;
y = 0;
}
public void setX(double d){//or boolean with a type check on input
x = d;
}
public void sety(double d){
y = d;
}
}
Run Code Online (Sandbox Code Playgroud)
使用替代约定的类从其setter方法返回.像这样:
public class Alternative{
private double _x;
private double _y;
public Alternative(){
x = 0;
y = 0;
}
public Alternative setX(double d){
x = d;
return(this);
}
public Alternative sety(double d){
y = d;
return(this);
}
}
Run Code Online (Sandbox Code Playgroud)
不同之处在于使用替代方法语法,例如
Alternative NewAlt(double x,double y){
return(new Alternative()
.setX(x)
.setY(y));
}
Run Code Online (Sandbox Code Playgroud)
可以使用经典设置,同样的工厂方法看起来像这样.
Classic NewAlt(double x,double y){
Classic temp = new Classic();
temp.setX(x);
temp.setY(x);
return(temp);
}
Run Code Online (Sandbox Code Playgroud)
有争议的是哪些更具可读性/可用性.
我的问题是关于这两种模式之间的性能差异.它存在吗?如果是这样,差异有多大,它来自何处?
如果没有性能差异,哪一个被认为是"更好的做法"?
asy*_*ync 18
方法链接在某些情况下看起来不错,但我不会过度使用它.它确实在构建器模式中得到了很多使用,如另一条评论中所述.在某种程度上,这可能是个人偏好的问题.
在我看来,方法链的一个缺点是调试和断点.单步执行填充链式方法的代码可能很棘手 - 但这也可能取决于IDE.我发现调试的能力绝对至关重要,因此我通常会避免在调试时使我的生活变得更难的模式和片段.