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

简介:
复制代码
 1 public class Client {  
 2     public void methodA(String str,Integer... is){       
 3     }  
 4      
 5     public void methodA(String str,String... strs){          
 6     }  
 7      
 8     public static void main(String[] args) {  
 9           Client client = new Client();  
10           client.methodA("China", 0);  
11           client.methodA("China", "People");  
12           client.methodA("China");  
13           client.methodA("China",null);  
14     }  
15 } 
复制代码

两个methodA都进行了重载,现在的问题是:上面的代码编译通不过,问题出在什么地方?看似很简单哦。

有两处编译通不过:client.methodA("China")和client.methodA("China",null),估计你已经猜到了,两处的提示是相同的:方法模糊不清,编译器不知道调用哪一个方法,但这两处代码反映的代码味道可是不同的。(The method methodA(String, Integer[]) is ambiguous for the type Client)

 

KISS原则(Keep It Simple, Stupid,即懒人原则),按照此规则设计的方法应该很容易调用,可是现在在遵循规范的情况下,程序竟然出错了,这对设计者和开发者而言都是应该严禁出 现的。

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

复制代码
1 public static void main(String[] args) {  
2      Client client = new Client();  
3      String[] strs = null;  
4      client.methodA("China",strs);  
5 } 
复制代码

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

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5412464.html,如需转载请自行联系原作者

相关文章
|
SQL Java 数据库
【MybatisPlus】MP的分页查询、多条件查询以及查询过程中解决null的空值判定
分页查询、多条件查询以及查询过程中解决null的空值判定
1392 0
【MybatisPlus】MP的分页查询、多条件查询以及查询过程中解决null的空值判定
|
Java Spring
解决Spring工具类BeanUtils copyProperties方法复制null的问题
解决Spring工具类BeanUtils copyProperties方法复制null的问题
730 0
|
26天前
|
Java 数据处理 Apache
探讨Java中判断String类型为空和null的方法
探讨Java中判断String类型为空和null的方法
18 1
|
1月前
|
Java
Java中判断String类型为空和null的方法
Java中判断`String`变量是否为空或`null`需用`== null`和`.isEmpty()`。示例代码提供两种方法:`main`方法直接判断,`safeGetString`方法提供默认值。当输入为`null`或空时,返回默认值。代码包含三个测试案例,分别处理`null`、空字符串和非空非`null`字符串。
53 0
|
2月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
|
8月前
|
Java
java servlet 文件上传 req.getPart null 返回空值
java servlet 文件上传 req.getPart null 返回空值
95 0
|
2月前
|
Java
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总
|
10月前
|
存储 关系型数据库 MySQL
MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
一篇短文让你明白MySQL数据库的表中 NULL 和 空值之间的区别!
4861 0
MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
|
2月前
|
JSON 前端开发 Java
【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之Spring定义Jackson转换Null的方法和实现案例
【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之Spring定义Jackson转换Null的方法和实现案例
71 0
|
9月前
|
SQL Java 数据库
【Mybatis-plus异常】mybatis-plus updateById方法更新不了空字符串和null的解决方法
【Mybatis-plus异常】mybatis-plus updateById方法更新不了空字符串和null的解决方法
328 0