【问题标题】:One method call, multiple possible error conditions - how to manage this in Object Oriented Programming?一个方法调用,多种可能的错误情况——如何在面向对象编程中管理这个?
【发布时间】:2015-12-15 15:44:14
【问题描述】:

我是 Java / OOP 的新手,我有兴趣了解解决此问题的标准方法。

假设我的 Java 程序包含以下主要方法:

public static void main(String[] args) {
    String name = args[1];
    Person person = PersonHelper.getPerson(name);
}

想象一下调用 getPerson 方法(在 PersonH​​elper.java 中定义的其他方法和类的帮助下)执行以下操作:

  1. 从模板构建 url 以从远程服务器获取有关“名称”的数据,例如https://allofthepeople.com/name 变为 https://allofthepeople.com/Alice
  2. 使用此 url 将有关 Alice 的 JSON 格式数据从服务器读取到缓冲区中
  3. 使用 JSON 解析器将此数据反序列化为 Person 对象
  4. 返回对象

现在有(至少)三个异常可以在这个例程中抛出:

  1. MalformedURLException(例如,如果我传入二进制数据而不是名称)
  2. IOException(例如,如果 /Alice 不存在)
  3. JSONParseException(例如,如果服务器的响应不是 JSON 格式)

假设调用getPerson(本例中为main)的方法需要能够区分这三个异常,应该怎么做呢?我看不出异常本身是如何返回的,因为赋值 Person person = PersonHelper.getPerson(name) 需要一个 Person 对象。

【问题讨论】:

  • 你不返回异常,你可能想要处理异常并让getPerson抛出这些异常。

标签: java oop error-handling


【解决方案1】:

继续往下:

public static void main(String[] args) {
    String name = args[1];

    try {
        Person person = PersonHelper.getPerson(name);
    }
    catch(MalformedURLException e) {
        // Handle exception
    } 
    catch(IOException e) {
        // Handle exception
    } 
    catch(JSONParseException e) {
        // Handle exception
    } 
}

并更改getPerson 方法的签名,使其抛出3 个异常,让main 进行处理。

public static getPerson(String name) 
     throws MalformedURLException, IOException, JSONParseException { ... }

【讨论】:

  • 谢谢 :) 在这种情况下,主要方法能否捕获 JSONParseExceptions(例如),这些异常是从 getPerson“沿链”抛出的几个方法?
  • 是的,只要他们“顺流而下”抛出异常,一直到您的 main 方法。
猜你喜欢
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多