它是否正确返回null?

时间:2015-10-02 06:57:33

标签: java

返回null是否正确,如果在数组中找不到对象,我认为它没用,或者怎么做对了?

public Product FindByProductName(Product [] products,String productName){

            for(Product item:products)
                if(item.GetProductName().equals(productName))
                    return item;
            return null;
        }

没用,因为我必须像这样使用这个功能

Product result = products.FindByProductName(productsArray, "someName");

        if(result == null)
            System.out.print("Object not found!");
        else result.Show();

public void Show() {
        System.out.println("Название продукта = " + this.GetProductName() + ";" + " Код продукта = " + this.GetProductCode() + ";" + " Марка металла = " + this.GetBrandMetal() + ";" + " Вес продукта = " + this.GetWeightOfProduct() + ";");
    }

1 个答案:

答案 0 :(得分:4)

  

如果在数组中找不到对象

,则返回null是否正确

这是一个常见的选择,除非数组中的null有效。例如,Map#get就是这样做的。而Map#get所做的事实意味着,如果您有一个存储null的有效地图,则必须首先致电containsKey以了解get是否返回null表示未找到或表示密钥已映射到null。 (这很尴尬。)

以下是您的选项综述,这些选项并非全部相互排斥:

  1. 如果找不到则返回null

  2. 如果没有找到则抛出。

  3. 提供查找产品索引的findIndex方法,如果找不到则返回-1。

  4. 提供投掷版本(findByProductName)和null - 返回版本(findByProductNameOrDefault),并让调用者决定哪种版本最适合他们的场景。

  5. 提供一个可选参数,该参数是未找到时要返回的值;然后调用者可以通过null,如果这是他们想要的,或其他什么。

  6. 为“未找到”案例提供lambda回调;再次呼叫者可以在lambda中做他们想做的事。

  7. 旁注:Java中压倒性的惯例是方法名称以小写字母开头,例如findByProductName而不是FindByProductName