课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 别让null值和空值威胁到变长方法
  • 别让null值和空值威胁到变长方法

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

  • 上一昆明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--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56