如何在Java代码中去掉烦人的“!=null”

技术如何在Java代码中去掉烦人的“!=null”本篇文章给大家分享的是有关如何在Java代码中去掉烦人的“!=null”,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一

这篇文章是关于如何摆脱烦人的”!=null”,边肖觉得挺实用的,所以分享给大家学习。希望你看完这篇文章能有所收获。让我们和边肖一起看看。

问题

为了避免空指针调用,我们经常会看到这样的语句。

if (someobject!=null){ 0

someobject . docalc();

}最后项目中会出现很多空码,多难看多累赘!如何避免这种情况?我们是否滥用了空洞的判断?

回答

这是初、中级程经常遇到的问题。他们总是喜欢在方法中返回null,所以在调用这些方法时,它们也必须为null。另外,可能是受这个习惯的影响,他们总是下意识地认为所有的回报都是不可信的,为了保护自己的程序,他们加了很多句子。

吐槽完毕,回到话题本身,并做出前所未有的判断。请区分以下两种情况:

Null是有效且有意义的返回值(其中null是合同中的有效响应;和)

Null无效且错误(如果它不是有效的响应。)

你可能不明白这两句话的意思。别担心,继续看,然后我们会详细讨论这两种情况。

让我们从第二种情况开始。

Null是一个不合理的参数,所以应该显式中断程序并抛出一个错误。这在api方法中很常见。例如,您已经开发了一个接口,id是必需的参数。如果调用者没有把这个参数传递给你,当然不会。你应该意识到这种情况,告诉打电话的人,“嘿,伙计,你给我发一个空的干什么?”

与空句子相比,有两种更好的检查方法。

Assert语句,您可以将错误的原因放入assert的参数中,这不仅可以保护您的程序不宕机,还可以将错误的原因返回给调用方。岂不是一举两得?(原文介绍了assert的用法,此处省略)

也可以直接抛出空指针异常。如上所述,此时null是一个不合理的参数。有问题就有问题,所以要大方地扔出去。

第一种情况更复杂。

在这种情况下,null是一个“看似”合理的值,例如,在我查询的数据库中,在某个查询条件下,没有对应的值。此时,null被视为表达“null”的概念。

以下是一些实用的建议:

如果方法的返回类型是collections,当返回结果为空时,可以返回一个空的collections(空列表),而不是null。这样调用方就可以大胆的处理这个返回,比如调用方得到返回后,可以直接打印list.size()而不用担心空指针。(什么?当我想调用这个方法的时候,我不记得这个方法以前是不是按照这个原理实现的。所以,代码习惯很重要!如果你养成了这样写代码的习惯(返回空集合而不是null),你可以在调用你写的方法时大胆地忽略null。

如果返回类型不是集合呢?

然后返回一个空对象(而不是空对象),并在下面给出一个“栗子”,假设下面的代码

公共接口操作{

void doSomething(

);}

公共接口Parser {

行动

查找操作(字符串用户输入);}其中,Parse有一个接口FindAction,它会根据用户的输入找到并执行相应的动作。如果用户输入不正确,可能找不到对应的Action,所以findAction会返回null,然后当Action调用doSomething方法时,会出现一个null指针。

解决这个问题的一种方法是使用空对象模式。

让我们改变它。

类的定义如下。以这种方式定义findAction方法后,确保无论用户输入什么都不会返回空对象:

公共类MyParser实现了Parser {

私有静态操作DO_NOTHING=

新操作(){ 0

public void dosometing(){ 0

/*什么都不做*/}

};

公共行动

查找操作(字符串用户输入){ 0

//.

如果(/*我们找不到任何操作*/) {

浸水使柔软

urn DO_NOTHING;
   }
 }
}

对比下面两份调用实例

1.冗余: 每获取一个对象,就判一次空

Parser parser = ParserFactory.getParser();
if (parser == null) {
 // now what?
 // this would be an example of where null isn't (or shouldn't be) a valid response
}
Action action = parser.findAction(someInput);
if (action == null) {
 // do nothing}
else {
 action.doSomething();
}

2.精简

ParserFactory.getParser().findAction(someInput).doSomething();

因为无论什么情况,都不会返回空对象,因此通过findAction拿到action后,可以放心地调用action的方法。扩展一下:Java:如何更优雅的处理空值?

其他回答精选:如果要用equal方法,请用object<不可能为空>.equal(object<可能为空>))

例如:

使用

"bar".equals(foo)

而不是

foo.equals("bar")

Java8或者guava lib中,提供了Optional类,这是一个元素容器,通过它来封装对象,可以减少判空。不过代码量还是不少。不爽。

如果你想返回null,请停下来想一想,这个地方是否更应该抛出一个异常。

以上就是如何在Java代码中去掉烦人的“!=null”,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/131718.html

(0)

相关推荐

  • 抖音刷人气软件免费,选择优质的刷赞平台

    技术抖音刷人气软件免费,选择优质的刷赞平台抖音的粉丝在哪儿买?怎样可以增加抖音的点赞和粉丝?现在很多人都喜欢抖音短视频,这段时间里,抖音很火,抖音挑战赛开始后,参与人数很多。每个人都在想如何才能拍出高质量的视频,观看量,

    2021年10月20日
  • wcf服务接口定义的前面需要注解啥(wcf序列化是在客户端还是服务端)

    技术WCF服务元数据结构模式是怎样的这篇文章主要介绍“WCF服务元数据结构模式是怎样的”,在日常操作中,相信很多人在WCF服务元数据结构模式是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月14日
  • 怎么解析zookeeper 原理

    技术怎么解析zookeeper 原理今天就跟大家聊聊有关怎么解析zookeeper 原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、zookeeper的角色

    攻略 2021年11月12日
  • 鳄鱼属于哺乳动物吗,为什么说鳄是最高等的爬行动物

    技术鳄鱼属于哺乳动物吗,为什么说鳄是最高等的爬行动物提起鳄鱼,大家就会想到它是很凶猛的动物鳄鱼属于哺乳动物吗。生活在热带地区的非洲鳄,长达5米,重约1吨。它们有时会突然咬住到河边饮水的牛、羚羊、鹿,用力地把它们拖入水中,

    生活 2021年10月23日
  • 怎样进行Vue2移动端开发环境搭建

    技术怎样进行Vue2移动端开发环境搭建这期内容当中小编将会给大家带来有关怎样进行Vue2移动端开发环境搭建,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这里给出基于 Vue2 的移动端

    攻略 2021年11月16日
  • 自建蜘蛛池用什么服务器比较好

    技术自建蜘蛛池用什么服务器比较好什么是蜘蛛池? 蜘蛛池原理其实很简单,就是由大量域名组成的站群,每个网站下生生成海量页面,这些页面内容都是相互组合拼凑出来的,没有什么质量可言,可以说就是一大群垃圾站点,但是这群网站,每个

    礼包 2021年10月30日