昆明java培训
达内昆明广州春城路

18487146383

热门课程

别让null值和空值威胁到变长方法

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

上一昆明Java培训机构的老师建议讲解了变长参数的重载问题,本建议会继续讨论变长参数的重载问题,上一建议的例子是变长参数的范围覆盖了非变长参数的范围,这次讨论两个都是变长参数的方法说起,代码如下:

1 public class Client5 {

2

3    public void methodA(String str, Integer... is) {

4

5    }

6

7    public void methodA(String str, String... strs) {

8

9    }

10

11    public static void main(String[] args) {

12        Client5 client5 = new Client5();

13        client5.methodA("china", 0);

14        client5.methodA("china", "people");

15        client5.methodA("china");

16        client5.methodA("china", ull);

17    }

18 }

两个methodA都进行了重载,现在的问题是:上面的client5.methodA("china");client5.methodA("china", ull);编译不通过,提示相同:方法模糊不清,编译器不知道调用哪一个方法,但这两处代码反应的味道是不同的。

对于methodA("china")方法,根据实参"china"(String类型),两个方法都符合形参格式,编译器不知道调用那个方法,于是报错。我们思考一下此问题:Client5这个类是一个复杂的商业逻辑,提供了两个重载方法,从其它模块调用(系统内本地调用系统或系统外远程系统调用)时,调用者根据变长参数的规范调用,传入变长参数的参数数量可以是N个(N>=0),那当然可以写成client5.methodA("china")方法啊!完全符合规范,但是这个却让编译器和调用者郁闷,程序符合规则却不能运行,如此问题,谁之责任呢?是Client5类的设计者,他违反了KISS原则(Keep it Smile,Stupid,即懒人原则),按照此设计的方法应该很容一调用,可是现在遵循规范却编译不通过,这对设计者和开发者而言都是应该禁止出现的。

对于Client5.methodA("China",null),直接量null是没哟类型的,虽然两个methodA方法都符合调用要求,但不知道调用哪一个,于是报错了。仔细分析一下,除了不符合上面的懒人原则之外,还有一个非常不好的编码习惯,即调用者隐藏了实参类型,这是非常危险的,不仅仅调用者需要"猜测调用那个方法",而且被调用者也可能产生内部逻辑混乱的情况。对于本例来说应该如此修改:

1 public static void main(String[] args) {

2        Client5 client5 = new Client5();

3        String strs[] = null;

4        client5.methodA("china", strs);

5    }

也就是说让编译器知道这个null值是String类型的,编译即可顺利通过,也就减少了错误的发生。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:避免带有变长参数的方法重载
下一篇:覆写变长方法也循规蹈矩

昆明java培训机构:你不知道java的小细节

昆明Java培训机构《Java编程中需注意的几大问题》

昆明java培训机构:java未来的发展走向

选择城市和中心
贵州省

广西省

海南省