null-null(null-null是什么意思)

健康新闻 2023-05-01 10:08健康生活www.xingbingw.cn

  null-null(null-null是什么意思),新营销网红网本栏目通过数据整理汇集了null-null(null-null是什么意思)相关信息,下面一起看看。

  让我们看一个在Java中使用null作为返回值的简单例子

  最大的问题是返回null而不是object。在面向对象的规范中使用null是非常糟糕的做法,应该避免。有许多论据支持这一观点,包括东尼霍尔的演讲《Null References, The Billion Dollar Mistake》和大卫韦斯特的整本书《Object Thinking》。接下来,我将整理所有的参数,并使用适当的面向对象的结构,而不是null作为返回值。目前,至少有两种方法可以替代null。

   1.使用空对象设计模式(最好定义一个常数)

   2.当一个对象不能被返回时,你可以抛出一个异常来使调用者快速失败。

  现在,我们来看看反对使用null的依据。除了上面提到的托尼霍尔斯的演讲和大卫韦斯特的书,还有罗伯特马丁的《Clean Code》,史蒂夫麦康奈尔的《Code Complete》,约翰松梅兹的《Say “No” to “Null”》和斯达克弗洛的讨论《Is returning null bad design?》,我在写这篇文章之前都读过。

  特殊错误处理必须在每次将对象引用作为输入时检查它是null还是有效。如果忘记检查,会导致运行时NPE(空指针异常)。所以你的代码逻辑会被多重检查和if/then/else分支污染。请看下面的例子

   C语言和许多其他过程编程语言都使用这种方法来处理异常。面向对象编程引入异常处理主要是为了消除这些特殊的错误处理逻辑。在面向对象编程中,我们不断地以冒泡的方式将异常向上抛出到应用层,这样我们的代码就会变得更小更漂亮。

   dept.getByName(杰弗里)。转移到(部门2);Null是过程化编程的封建残余。请改用空对象或异常。

  语义模糊为了表达函数将返回真实对象或null的意思,getByName()必须命名为getByNameOrNullIfNotFound()。每个类似的函数都应该这样做,否则会给代码读者带来歧义。

  为了语义的准确性,您应该为函数定义更长的名称。

  为了消除歧义,该函数试图返回一个真实对象、一个空对象或抛出一个异常。

  有些人会争辩说,有时为了性能必须返回null。例如,当在映射中找不到相应的条目时,java映射接口中的get()将返回null,例如

  由于map的get()返回null,所以上面的代码只会在Map中搜索一次。如果我们想重写Map的get(),使它在找不到条目时抛出异常,代码应该这样写

  很明显,这个比第一个慢一倍。我该怎么办?我认为Map的界面设计是有缺陷的(无意冒犯作者)。它应该返回一个迭代器迭代器,这样我们的代码可以如下所示

   BTW,这是C标准库(STL)中map:find()的设计思路。

  计算机思维vs对象思维如果有人知道Java对象是指向数据结构的指针,null是空指针(在Intel x86处理器中等于0x00000000),他应该能收到if(employee==null)语句。,如果从对象思维的角度来思考,这种说法是没有意义的。从对象的角度来看,我们的代码如下所示

  你好,这是软件部门吗?

  是

  请让我和你的员工杰弗里谈谈。

  请稍等片刻.

  喂

  你是NULL?

  上面对话的一句看起来很奇怪,不是吗?相反,如果他们只是在收到我要求和杰弗里通话的请求后就挂断电话,就会很快让我们出现故障(异常)。这时,我们可以尝试拨号,或者直接告诉我们的主管,无法联系到Jeffrey来完成更大的交易。

  或者,他们可以让我们与另一个人交谈,这个人不是杰弗里,但如果我们需要一个“特定的”杰弗里(空对象),他可以帮助我们解决大多数问题,或者拒绝帮助。

  缓慢的失败与快速的失败相反。上面的代码试图慢慢死去,杀死其他人。它向调用者隐藏了失败,而不是让他知道有问题,需要立即处理。这个结论与上面特殊错误处理一章中的讨论非常接近。最好让代码尽可能的脆弱,必要时崩溃。

  确保对调用者提供的操作数有极高的要求。如果调用者提供的数据不够或者根本不符合主要使用场景,抛出异常。或者返回一个空对象,这将公开一些常见的行为,并对所有其他调用引发异常。请参考以下内容

  可变的和不完整的对象,强烈建议在设计对象时考虑不变性。这意味着在实例化对象的过程中

  获得所有必要的内容,并且在整个生命周期中永远不会更改其状态。 null 通常被用在延迟加载中以使对象不完整且可变。例如

  这种技术虽然应用广泛,但在面向对象编程中是一种反设计模式的。主要是因为它使一个对象负责计算平台的性能问题,而这对 Employee 对象应该是透明的。

  与其管理状态并公开业务相关的行为,不如让对象处理好其自身结果的缓存---这就是延迟加载的目的。缓存不是 employee 该在办公室里做的事,不是吗?

  解决办法是不要像上面的例子那样,以这种原始的方式使用延迟加载。相反,将这个缓存问题移到应用程序的另一层。例如在 Java中可以使用面向切面编程技术。 例如,jcabi-aspects 使用 @Cacheable 注解来缓存 返回的值

  希望通过这篇文章的分析,能让你停止在代码中继续使用 null 作为返回值。

   相关文章

  十大巅峰网游小说(十大公认网游小说神作推荐)

  百度网盘登陆入口(百度网盘共享群的正确使用方法)

  恶人传评价(《恶人传》以暴制暴成了救赎)

  百度网盘登录入口(百度网盘安装方法)

  番禺中学排名(番禺区热门学校盘点)

  马路标志(交通安全标示大全及图解)

  苹果序列号是哪个(iPhone序列号知识扫盲)

  故宫太和殿介绍(故宫的太和殿为什么叫金銮殿)

  东营人均gdp(中国人均GDP前15强城市)

  陆贞原型(陆贞传奇的原型各个奇葩)

  硫酸铜什么颜色(硫酸铜的用途与危害)

  小米平板4参数(小米平板4参数全曝光)

  更多null-null(null-null是什么意思)相关信息请关注本文章,本文仅仅做为展示!

Copyright@2015-2025 www.xingbingw.cn 性病网版板所有