java - 没有找到对象时如何处理返回值

标签 java object methods find

我这里有以下代码,它旨在查找并返回产品对象,使用字符串输入与所有产品的名称进行比较。

public Product find(String input){

    for(int i = 0; i <Products.size();i++)
    {
         if(input ==Products.get(i).getName()){

         return Products.get(i);
        }   
    }   
}

我有两个问题。

A) 返回值位于 IF 语句内部,因此 main 方法 find() 没有返回值。因此我收到了一条关于此问题的错误消息。

B) 如果用户输入不存在的产品名称,则不会找到任何产品, 它不应该返回任何东西,但我不知道该怎么做。目前结果正在 用于删除产品,因此如果它传递要删除的空产品对象,则可能会导致删除方法中出现错误输出。

我是编程新手,所以如果这是一个新手问题,我很抱歉,任何帮助将不胜感激。

最佳答案

(A)和(B)实际上是同一个问题。 :-)

您需要在循环后添加代码,以便在未找到匹配项时执行以下两件事之一:

  1. 引发异常,或者

  2. 返回null

...或返回一个可选作为Andreas shows you in his answer .

如果找不到匹配项是常见且正常的情况,则返回 null 是标准的。如果未找到匹配项是不寻常且意外的情况,则抛出异常是标准做法。

<小时/>

关于该代码的其他一些注释:

  1. 不要使用==来比较字符串,使用equalsdetails

  2. 我假设Products是实例变量(字段)或静态变量。如果是这样,则最初不应对其进行限制。标准 Java 命名约定的实例和静态变量以小写字母开头。

  3. 如果 Products 是一个实例变量,我强烈建议使用 this. 来访问它(this.Products,而不仅仅是产品),尽管这是风格问题; Java确实允许您放弃它。

  4. 如果Products是一个数组或List(给定size()方法,它看起来像一个列表),您可能最好使用增强的 for 循环。

  5. 不鼓励过多使用空行。再说一次,这只是风格问题。 :-)

  6. 最好与花括号 ({}) 的位置保持一致(位于行尾,或单独位于下一行,但不能同时出现在行中)相同的代码)。 :-)

考虑到上述所有因素,假设 Products 是一个实例变量:

public Product find(String input) {
    for (Product product : this.products) {
        if (input.equals(product.getName())) {
            return product;
        }   
    }   
    return null;
}

关于java - 没有找到对象时如何处理返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757011/

相关文章:

java - 从类方法显示类对象

java - 不能调用非静态方法

javascript - 递归地 trim 对象键和值中的空格

java - 不兼容的类型 : String cannot be converted to Word

javascript - 如何从 JavaScript 数组中删除重复的对象(字符串)

java - 并发调用单例对象的Java方法

java - 内容存储库的定义到底是什么?

Java 转换实现

java - Java 中非常奇怪的 PreparedStatement?

java - 如何使用多个条件从集合列表中过滤