在java对象中进行构造函数更改时的最佳实践
作者:互联网
我有一个类,其中根据新的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个参数的构造函数.
是否应该弃用/删除构造函数的最佳实践,以便不会发生这种情况?
解决方法:
从以下更改旧构造函数:
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的用户分析更改的内容并连接新的构造函数.
如果你不这样做,他们将继续使用旧的,因为程序员是懒惰的:-)
标签:java,design-patterns,api-design 来源: https://codeday.me/bug/20190706/1395410.html