null什么意思(对象为null什么意思)

来源 | https://urlify.cn/RFzYbm来源| https://urlify.cn/RFzYbm为了避免空指针调用,我们经常会看到这样的语句。

null什么意思(对象为null什么意思)插图

来源 | https://urlify.cn/RFzYbm来源| https://urlify.cn/RFzYbm

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

如果(someobject!= null){ someobject . docalc();}最后项目中会出现大量的判断空代码。多么丑陋和乏味!如何避免这种情况?我们有没有滥用空这句话?

回答

这是初、中级程的通病。他们总是喜欢在方法中返回null。所以在调用这些方法的时候,他们也要判断空。另外,也许是受这个习惯的影响,他们总是下意识地认为所有的回报都不可信。为了保护自己的节目,他们加了很多句子空。

吐完了,回到话题本身。在做出判断空之前,请区分以下两种情况:

null 是一个有效有意义的返回值(Where null is a valid response in terms of the contract; and)null 是无效有误的(Where it isn’t a valid response.)

你可能不明白这两句话的意思。别担心,继续读下去。接下来我们将详细讨论这两种情况。

先说第2种情况

如果null是一个不合理的参数,您应该显式中断程序并抛出一个错误。这种情况在api方法中很常见。例如,如果您开发一个接口,id是一个必需的参数。如果调用者不把这个参数传给你,当然不行。要意识到这种情况,告诉打电话的人“嘿,伙计,你为什么给我发一个空的& # 34;。

比起空这个句子,有两种更好的检查方式。

assert语句,你可以把错误原因放到assert的参数中,这样不仅能保护你的程序不往下走,而且还能把错误原因返回给调用方,岂不是一举两得。(原文介绍了assert的使用,这里省略)也可以直接抛出空指针异常。上面说了,此时null是个不合理的参数,有问题就是有问题,就应该大大方方往外抛。第1种情况会更复杂一些

在这种情况下,null是一个“表面上”合理的值。比如在I查询数据库中,某个查询条件下没有对应的值。这时null表达的是“空”的概念。以下是一些实用的建议:

假如方法的返回类型是collections,当返回结果是空时,你可以返回一个空的collections(empty list)

调用方可以大胆地处理这个返回,而不是返回null。比如调用方得到返回后,可以直接打印list.size(),而不用担心空指针问题。(什么?当我想调用这个方法的时候,我不记得我之前是否按照这个原理实现了这个方法。所以,编码习惯很重要!如果养成了这样写代码的习惯(return 空collections而不是null),那么在调用自己写的方法时,可以大胆忽略判断空。

返回类型不是collections,又怎么办呢?

然后返回一个空对象(而不是空对象)。这里有一个“栗子”,假设下面的代码

public interface action { voiddoSomething();} public interface parser { ActionfindAction(StringuserInput);}其中Parse有一个接口FindAction,它会根据用户的输入找到并执行相应的动作。如果用户输入错误,可能找不到对应的动作,所以findAction会返回null,然后动作调用doSomething方法时会出现指针空。

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

我们来改造一下

该类定义如下,因此在定义findAction方法后,可以确保无论用户输入什么,都不会返回空对象:

publicsclassmyparserimplementsparser { privatestaticActionDO _ NOTHING = new action(){ publicviddosomething(){/* do NOTHING */} };publicatactionfindaction(StringuserInput){//...if(/* we can & # 39;tfindanyactions */){ returnDO _ NOTHING;}}}比较以下两个调用示例

1.冗余:空每获取一个对象奖励一次。

parser parser = parser factory . get parser();if(parser==null){//nowwhat?//this wouldbeanexampleofwherenullis & # 39;t(或者应该& # 39;tbe)avalid response } action action = parser . find action(some input);if(action = = null){//do nothing } else { action . do something();}2.精简

ParserFactory.getParser()。findAction(someInput)。do something();无论发生什么,都不会返回空对象,所以通过findAction获取动作后,可以放心地调用动作的方法。

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

"酒吧& # 34;。等于(foo)而不是

foo . equals(& # 34;酒吧& # 34;)在Java8或guava lib中,提供了可选的类,它是一个元素容器,通过它可以封装对象,可以减少判断空。但是,还是有很多代码。不开心。如果要返回null,请停下来想一想这个地方是否应该抛出异常。Stackoverflow链接:http://stack overflow . com/questions/271526/avoiding-null-statements-in-Java?page=2&tab=votes#tab-top

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/173683.html

发表回复

登录后才能评论