java—如何在测试数据时避免空指针异常

gwo2fgha  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(467)

我必须对数据集应用一个算法。数据集由两种类型的对象组成,每种对象都有一个特定的id。
您可以在这里找到我的第一种对象:

public static List<ObjectType1> getObjectType1() {
List<ObjectType1> myList = new ArrayList<ObjectType1>();

//Creating one ObjectType1 with ID : 1L
ObjectType1 obj1 = new ObjectType1();
obj1.setId(1L);

//Creating one ObjectType1 with ID : 2L
ObjectType1 obj2 = new ObjectType1();
obj2.setId(2L);

//Creating one ObjectType1 with ID : 3L
ObjectType1 obj3 = new ObjectType1();
obj3.setId(3L);

myList.add(obj1);
myList.add(obj2);
myList.add(obj3);

return myList;
}

这是第二类物体:

public static List<ObjectType2> getObjectType2(){
List<ObjectType2> myList = new ArrayList<ObjectType2>();

//Creating one ObjectType2 with ID : 1L
ObjectType2 obj1 = new ObjectType2();
obj1.setId(1L)

//Creating one ObjectType2 with ID : 2L
ObjectType2 obj2 = new ObjectType2();
obj2.setId(2L)

//Creating one ObjectType2 with ID : 4L
ObjectType2 obj3 = new ObjectType2();
obj3.setId(4L)

myList.add(obj1);
myList.add(obj2);
myList.add(obj3);

return myList;
}

我需要做的是对它应用一个简单的算法,但我的主要问题是,我有一个空指针异常尽快尝试这样做。
让我解释一下:我想对所有objecttype1进行排序。那些与objecttype2具有相同id的,我保留它们。这意味着如果objecttype1 id(第一个为long:1l)存在于objecttype2-->i中,则保留它。如果objecttype1 id不存在,则它是objecttype2-->之一,我们不保留它。我怎样才能使这个简单的“排序”?
到目前为止,我想做的是:

while (valueIterator.hasNext()) {
        value = valueIterator.next();

        if (value instanceof ObjectType1) {
            objType1 = ObjectType1.newBuilder((ObjectType1) value).build();
        } else if (value instanceof ObjectType2){
            objType2 = ObjectType2.newBuilder((ObjectType2) value).build();
        }
    }

    for(ObjectType1 obj : objs){
        if (objType1.getId().equals(objType2.getId())) {
            keep(objType1);
        } else if (objType1.getId() != objType2.getId()) {
            dontKeep(objType1);
        }
    }

我的空指针异常出现在这里 if (objType1.getId().equals(objType2.getId())) 因为当我尝试获取objtype2的id'3l'时,它不存在。。。
如果没有数据集,如何正确进行排序?我找不到正确循环的方法。
谢谢你的帮助。

b1payxdu

b1payxdu1#

有一个很好的技巧可以避免空指针异常。在这里-

public List<SomeObject> someMethodReturnsSomeObjects(){

 List<SomeObject> lists = new ArrayList<SomeObject>();

 return (null!=lists ? lists : Collections.EMPTY_LIST);

}

这里你还需要测试 null . 但是这个代码片段的好处是您只需要检查 null 只在一个地方例如在你的 ObjectType1.newBuilder((ObjectType1) value).build() 返回时的方法 objectType1 . 但是在这之后,您就不需要检查null,因为您可以确定您的方法永远不会返回null。现在你不需要使用 null 检查客户代码 ObjectType1.newBuilder((ObjectType1) value).build() .
此外,您还可以对大多数数据类型执行此操作-
对于字符串: return (null != str ? str : ""); 对于Map: return (null != map ? map : Collections.EMPTY_MAP); 对于集合: return (null != map ? map : Collections.EMPTY_SET); 或者对于其他用户定义的数据类型,您可以创建自己的伪数据,如空\uMap或空\u列表。
希望能有帮助。
谢谢。

相关问题