【问题标题】:Returning an object within a method containing try-catch block (Java)在包含 try-catch 块 (Java) 的方法中返回对象
【发布时间】:2020-10-05 21:51:37
【问题描述】:

我想在具有 try-catch 块的方法中返回一个对象。如下所示,该方法接收一个 CSV 文件,读取serialNumber,并应该从 CSB 文件中返回一个带有名称、年份等属性的图书对象。我只想返回这个对象,但鉴于foundName 是本地对象,因此我不知道在范围内的哪个位置返回它,因此我将无法返回新对象r

public static ReadCSVExample1 readBook(String filename, String serialNumber){
        try{
            String line = "";
            BufferedReader br = new BufferedReader(new FileReader(filename));
            String foundName = "";
            while ((line = br.readLine()) != null){
                String[] values = line.split(",");
                for (int z = 0; z<values.length; z++){
                    if (values[z].equals(serialNumber)){
                        System.out.println(values[z]+ " found!");
                        foundName = values[z+1];
                        System.out.println(values[z+2]);
                        System.out.println(values[z+3]);
                    }
                }
            }
        } catch (FileNotFoundException e){
            System.err.println(e);
        } catch (IOException e){
            System.err.println(e);
        }ReadCSVExample1 r = new ReadCSVExample1(foundName);
        return r;
    }

【问题讨论】:

  • 在您的 for 循环 if 语句块中(在控制台最后一个输出下方的底部)添加:return new ReadCSVExample1(foundName);。让位于方法底部的return语句返回nullreturn null;,表示未找到序列号。

标签: java object methods


【解决方案1】:

只需将foundName 移到try-catch 块之外,如下所示:

public static ReadCSVExample1 readBook(String filename, String serialNumber){
       String foundName = "";
        try{
            String line = "";
            BufferedReader br = new BufferedReader(new FileReader(filename));
            
            while ((line = br.readLine()) != null){
                String[] values = line.split(",");
                for (int z = 0; z<values.length; z++){
                    if (values[z].equals(serialNumber)){
                        System.out.println(values[z]+ " found!");
                        foundName = values[z+1];
                        System.out.println(values[z+2]);
                        System.out.println(values[z+3]);
                    }
                }
            }
        } catch (FileNotFoundException e){
            System.err.println(e);
            return null;
        } catch (IOException e){
            System.err.println(e);
            return null;
        }ReadCSVExample1 r = new ReadCSVExample1(foundName);
        return r;
    }

如果它不在 try-catch 块之外,则 foundName 的范围在 try-catch 块内。如果你把它移到外面,它的作用域就是整个方法。

【讨论】:

  • 还需要在异常处理程序中return null,否则您将尝试从垃圾输入构建对象
猜你喜欢
  • 2020-11-27
  • 2014-04-30
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多