【发布时间】:2017-05-07 02:18:22
【问题描述】:
我有一个小但非常烦人的错误。
实际上,我正在编写家谱,在某些情况下我会搜索一个人,但有时该人不在树中(有道理)。所以我的方法返回null。
问题是当我尝试做这样的事情时。
familytree.getNode("Peter").getName();
Peter 不在树中,但他试图获取名称,我的代码给了我一个 NullPointerException(再次有意义)。
虽然我不知道如何处理这种问题,但我有很多类似的方法,例如 getName()... 例如 getGender()、getWife() 等
我有两个类,familytree(带有搜索、删除等方法)和节点(带有有关此人的所有信息)。
也许你们有一个想法!
编辑:
例如这是我的主要方法;
familytree.getNode("Fred").getGender(); //布尔值
familytree.getNode("Max").getGender();
familytree.getNode("Peter").getGender();
familytree.getNode("Fe").getPartner(); //合作伙伴名称
familytree.getNode("Freddyy").getName(); //字符串
如何检查每个案例是否为空指针?
【问题讨论】:
-
Node是框架类还是你自己的代码?如果后者最好的方法是返回一个虚拟元素而不是null。 -
@TimothyTruckle 好吧,“虚拟”元素有时是有意义的;但在这里,很难。为“空”的假人定义“正确”的语义看起来很难。我不认为这是自然的第一个解决方案。
-
@GhostCat 我会说这是一个有用的虚拟元素的完美例子。 OP 在想要访问元素上的 getter 的程序中有很多代码。空检查的唯一原因是显示一些替换文本,这些替换文本也可以从虚拟对象中获取。
-
@TimothyTruckle 那么请向我解释一个“虚拟”人的语义。假人几岁?它叫什么名字?你如何对一个包含 3 个真人和 7 个假人的数组进行排序?继续进行。您现在只是将 *real 问题转移到许多不同的地方。突然之间,你有 50 种方法需要对假人进行特殊处理。
-
@GhostCat “那么请给我解释一下“Dummy”人的语义。Dummy 人多大?它叫什么名字?”
null,你会打印出什么名字/年龄?不从假人那里得到那些“空替换”的确切原因是什么?