编程语言
首页 > 编程语言> > 在java对象中进行构造函数更改时的最佳实践

在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