当前位置: 首页 > news >正文

[改善Java代码]别让null值和空值威胁到变长方法

建议5:别让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类型的,编译即可顺利通过,也就减少了错误的发生。

 

转载于:https://www.cnblogs.com/DreamDrive/p/5412464.html

相关文章:

  • Java 同步容器
  • activeMQ使用注意
  • 软件工程第二次作业----(1)补交
  • Android学习笔记(十六)——数据库操作(上)
  • IPS简单使用方法
  • Android--JNI编程详解
  • shiro中的shiro:principal /标签的使用
  • Facebook Like Button在IE上的bug
  • linux安装VNC服务
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 传球接力
  • 数据库表分割技术浅析
  • number 90分的暴力
  • Hybrid App是如何实现网页语言与程序语言的混合?谁占主体?
  • 推荐一个linux下的web压力测试工具神器webbench
  • 《Java编程思想》读书笔记-对象导论
  • 《剑指offer》分解让复杂问题更简单
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • CentOS7 安装JDK
  • css属性的继承、初识值、计算值、当前值、应用值
  • JavaScript 一些 DOM 的知识点
  • JS实现简单的MVC模式开发小游戏
  • leetcode386. Lexicographical Numbers
  • Lucene解析 - 基本概念
  • MQ框架的比较
  • React的组件模式
  • tab.js分享及浏览器兼容性问题汇总
  • webgl (原生)基础入门指南【一】
  • 从0到1:PostCSS 插件开发最佳实践
  • 机器学习 vs. 深度学习
  • 计算机在识别图像时“看到”了什么?
  • 技术发展面试
  • 跨域
  • 如何用vue打造一个移动端音乐播放器
  • 深度学习中的信息论知识详解
  • 首页查询功能的一次实现过程
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎样选择前端框架
  • 正则表达式-基础知识Review
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #预处理和函数的对比以及条件编译
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C++17) std算法之执行策略 execution
  • (C语言)共用体union的用法举例
  • (二)WCF的Binding模型
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (七)Java对象在Hibernate持久化层的状态
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • .Net Core 中间件验签
  • .net FrameWork简介,数组,枚举
  • .NET MVC 验证码
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?