我有一个类,其中根据新的api集成添加了许多参数。
例如,早些时候我有一个包含4个参数的类:
Integer a;
String b;
Map<String, String> c;
List<Integer> e.
所以构造函数是:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
}
在我们的代码中,有几个团队使用此构造函数与我的API集成。 过了一段时间,这个类中添加了一个新参数。即
Double d;
所以我添加了一个新的构造函数:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e,
Double d)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
this.d = d;
}
我将之前的构造函数标记为已弃用。我没有删除以前的构造函数,因为如果删除,客户端的代码将会中断。
随着新参数的添加,我现在有了5个参数的构造函数。
是否有关于如何弃用/删除构造函数的最佳实践,以便不会发生这种情况?
答案 0 :(得分:3)
从以下位置更改旧构造函数:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
}
到
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e)
{
//Zero is passed as a default value, but you can pass anything you want
this(a,b,c,e,0);
}
通过这种方式,它将在新的引导下进行调用。
但是,您没有提供足够的信息,说明应该支持旧版本。如果它根本不应该,那么你应该从代码中删除它。这样,您将强制API的用户分析更改的内容并连接新的构造函数。
如果你不这样做,他们将继续使用旧版,因为程序员很懒惰: - )
答案 1 :(得分:0)
遵循Open/closed principle会很有帮助。您最初编写的类不应在需要新功能时进行修改,而应从其中派生另一个类以扩展其功能。
答案 2 :(得分:-2)
为什么不使用变量参数构造函数。这样你就可以将任意数量的参数传递给构造函数。
例如:
公共双倍平均值(双倍数字){
double total = 0.0; // initialize total
// calculate total using the enhanced for statement
for ( double d : numbers )
total += d;
return total / numbers.length;
} // end method average