空安全解除引用在Java中喜欢? 在使用Groovy也许单子

我正在从目标C到Java移植一个代码库。 有方法链的几个用法不nullchecks

dog.collar().tag().name()

我一直在寻找类似的安全,提领运算符的东西? 在Groovy中,而不必nullchecks

dog.collar?.tag?.name

这导致了也许单子就什么都没有,而不是空的概念。 但没有全部实现我碰到抛出异常值时,访问仍然没有解决链接问题。 我做了没有回报的模拟,它的行为就像NullObject模式。 但它解决了链接问题。

这有什么不对的执行没有什么的? [http://github.com/sathish316/jsafederef/blob/master/src/s2k/util/safederef/Nothing.java]

至于我能看到一感觉奇怪使用嘲讽库中的代码2.不会停止在第一个空。 3.如何区分,因为空引用或名称空结果之间实际上是空? 它是如何在Groovy代码区分?

--------------解决方案-------------

我不会真的建议只检查零点。 真的,我建议甚至没有永远返回null,而是抛出异常。

在这两种情况下,你是不会让任何代码快做这个空对象的方法,我想你会刚刚结束了混乱的人,只是因为要复制的不同的编程语言的功能。 我想你应该只是适应你所使用的语言。

我喜欢这个操作为好,但它并不适用于Java的 - 再加上它是一个权宜之计补丁马虎代码:如果dog.collar没有一个标签,它应该分支不同,如果标签没有按'吨有一个名字 - 它可能是一个错误,应该抛出一个异常。

不在于它解决了什么话要说“的代码更好”,当你继承你没有写代码。

我建议你​​首先重构你的代码 - 如果这样的代码是发生所有的地方,也许它需要反正转移到一个集中的功能。 如果do​​g.getName()代表dog.collar()来得到它的标签,最后是标签的名字,那么你只需要固定在一个地方这个bug(狗必须有一个名字,即使它不是在衣领上,所以dog.getName应该能够遍历解决您的问题任意路径 - 现在再这样做了蹩脚的代码下一个景点。

每当你看到自己修补相同的代码在两个地方,有一个保理的问题。 如果只发生一次为每个组属性(如果它已经完全分解和面向对象),那么它不可能是一个严重的问题,只是一对夫妇的补丁。

哎呀,没有像这样的代码,甚至违反熟悉的一些规则?

你可以使用闭包来明确落实这是也许单子。

我跑过这个的同时,我跑过你的问题。
http://groovyconsole.appspot.com/script/205001

的? 安全解引用显然是syntatically清洁剂在常规的空检查,就可以结束链:返回空的没有价值,而不是如在这种情况下“”。

如果您想了解单子我建议学习Haskell,然后自然地开始看到这些概念如何能够和在其他语言中使用。 语言,允许可变性,即使functionalish(如斯卡拉)经常展示“不纯”的解决方案,而不是单纯的功能的。

有一个在Java中没有“安全解引用”操作符。

我认为这是一件好事,因为“安全解引用”往往是一个错误是伪装。 你已经基本上两种可能性:

  • 该值不应该永远是零 。 在这种情况下,空表示你的假设一个严重的错误,你应该抛出一个NullPointerException异常,如果空以某种方式出现(这是快速失败的原理)
  • 可以为null。 在这种情况下,你通常应该做一些明确的空处理,它是更复杂的不仅仅是“不调用此方法”。 你不得不想:是什么空的意思是在这种情况呢?

就个人而言,我平时看到的长链的方法作为提示重构你的代码分成更小的,明确的命名方法(它可以根据需要里面包妥善处理空值)。 这可能是比引进单子在大多数情况下更明智。

分类:java的 时间:2012-01-01 人气:0
分享到:

相关文章

  • 运行Java程序时NullPointerException异常错误 2013-04-05

    NullPointerException异常错误运行程序时,我不能找出原因. 确切的错误是在线程异常"主"显示java.lang.NullPointerException在EditDistance.editDistance(EditDistance.java:32)在EditDistance.main(EditDistance.java:19) import java.util.ArrayList; public class EditDistance { public static v

  • 为什么Java的有NullPointerException异常,而不是NullReferenceException异常? 2013-09-28

    可能显示的文件: 什么是空指针异常? Java的:没有NullPointerException异常为什么被称为NullReferenceException异常? 闲置好奇我们,没有人知道为什么在Java中的空引用异常被称为NullPointerException异常? 这似乎有悖常理,在该官方没有指针,一个新的语言选择将作出使用空引用时使用此名称. 如果任何人都可以点我一个权威的解释,那将不胜感激. --------------解决方案------------- 了Java",正式并没有指针&q

  • 从java.lang.J9VMInternals NullPointerException异常 2015-01-05

    我试图运行这个Qt的占碑Hello World示例略加修改版本,但我遇到一个NullPointerException异常tracable我的代码的第一行. 这是有可能的唯一方法似乎是如果的QApplication为空,但它是我的构建路径,我的代码编译. 起初我想,如果空指针是我缺乏一个构造函数,但增加一个仍然导致错误. 现在,我不知道是否是因为有可能是一些JNI(Java本地接入)将在幕后进行的Qt Jambi的工作,或者尽管编译(在Eclipse)时,IDE仍无法正常执行文件的主要方法. 这是

  • Java的构造NullPointerException异常问题 2013-04-29

    我有一个小问题,了解如何创建一个子类的构造器,它扩展了父class.Here是我使用的代码: 父类的构造函数: public RPCPacket( int apacketId, RPCPacketType apacketType, RPCOperationType aoperationType, String tmpPacket_objectOid, int aobjectId, int adataSize, String tmpPacket_dataHash, RPCPacketDataTyp

  • 为什么Java的产生“NullPointerException异常”时,有在Java中没有指针? 2013-05-22

    为什么我会叫一个异常NullPointerException ,如果在Java中没有这样的理念为指针? --------------解决方案------------- 是的,这是第一个烦人的事情学习Java大声笑,当我得知之一. 这真的应该叫的NullReferenceException,NoObjectException或DereferenceException作为paxdiablo提及. 参考文献甚至没有在内部表示为指针,你不应该在乎. "大多数的虚拟机,包括Sun的使用手柄,不是指针.句柄

  • TextView的onCreateView后为空:NullPointerException异常 2012-07-01

    我已经尝试了一些提交堆栈溢出的解决方案,但至今没有任何帮助我. 当按钮听众中调用父活动的另一个片段被触发,会出现问题. 父活动调用这个片段updateValue()方法(见下文). 在onCreateView()从我的片段,我有以下代码: Result.class延伸片段 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { vie

  • 在java.awt.Window.access $ 700(Window.java:132)NullPointerException异常而画的JPanel 2014-06-04

    我试图内线成分paint(Graphics)的方法JPanel . 下面的代码片段工作得很好,一个JButton是我很好的画JPanel : @Override public void paint(Graphics g) { super.paint(g); JButton btn = new JButton("hello"); Dimension dim = btn.getPreferredSize(); btn.setSize(dim.width, dim.height); btn.

  • 奇怪的Java Swing UI NullPointerException异常Windows Server 2003上 2014-08-10

    我的Windows XP(32位)关于Java 1.6.0_20运行的Swing应用程序. 我想通过Citrix 3.0发布应用程序,在Windows Server 2003上运行时尝试运行客户端jar(具有相同的JRE和参数上XP,这正常工作)从服务器,但是,以下抛出异常: Exception: java.lang.NullPointerException Thu May 17 18:52:09 GMT 2011 java.lang.NullPointerException at com.su

  • 如何处理错误了java.lang.RuntimeException / NullPointerException异常 2012-11-03

    我按照本教程的"JPA的Web服务"(http://www.netbeans.org/kb/61/javaee/persistence.html). 我遵循的步骤本教程的步骤,当我编译代码,我没有问题. 但是,当我运行程序我得到了很多的错误 我已经下载完成的项目,但它仍然同样的错误,任何方式来处理这个问题? 谢谢 CORE5061: Exception : java.lang.NullPointerException at com.sun.enterprise.util.Invocat

  • Java的:NullPointerException异常从class.getResource( - ) 2013-07-22

    我正在写一个小应用程序,当我试图创建一个ImageIcon我总是有一个例外. 唯一的例外是造成这行代码: prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png"))); 现在我的计划之内,该文件夹/图标/确实存在. 我不知道,如果它使差异,但类文件是一个包,那里的图标文件夹是项目文件夹中(当你将看到bin和src文件夹)中. 我环顾四周了一下,我无法找到一个解决方案,可以帮助我解

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.919 (s). 10 q(s)