返回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() + ";");
}
答案 0 :(得分:4)
如果在数组中找不到对象
,则返回null是否正确
这是一个常见的选择,除非数组中的null
有效。例如,Map#get
就是这样做的。而Map#get
所做的事实意味着,如果您有一个存储null
的有效地图,则必须首先致电containsKey
以了解get
是否返回null
表示未找到或表示密钥已映射到null
。 (这很尴尬。)
以下是您的选项综述,这些选项并非全部相互排斥:
如果找不到则返回null
。
如果没有找到则抛出。
提供查找产品索引的findIndex
方法,如果找不到则返回-1。
提供投掷版本(findByProductName
)和null
- 返回版本(findByProductNameOrDefault
),并让调用者决定哪种版本最适合他们的场景。
提供一个可选参数,该参数是未找到时要返回的值;然后调用者可以通过null
,如果这是他们想要的,或其他什么。
为“未找到”案例提供lambda回调;再次呼叫者可以在lambda中做他们想做的事。
旁注:Java中压倒性的惯例是方法名称以小写字母开头,例如findByProductName
而不是FindByProductName
。