返回虚拟接口实例?

时间:2017-08-31 20:46:51

标签: java

我有来自与某些API相关的第三方的示例代码。由于返回语句中存在未处理的异常,因此无法运行。

问题:返回类型是一个接口,其实例始终使用复杂的工厂创建(假设我无权访问这些实例)。因此,即使我以愚蠢的do-nothing方式处理异常,我仍然无法返回有效的虚拟对象。

public FunnyInterface calculateSomething()
{
   return builder.someFunnyInterface(); // throws Exception
}

要运行此代码,我可以不涉及任何内容:

  • 修改调用calculateSomething()的路径上的代码
  • 在API中查找不会抛出异常的构建器,或
  • 手动编写实现接口的虚拟类

2 个答案:

答案 0 :(得分:0)

由于您写道,您无法调用构建器,我猜您对FunnyInterface类型的值不感兴趣,因此只需返回null

public FunnyInterface calculateSomething() {
    try {
        return builder.someFunnyInterface(); // throws Exception
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

或者只是

public FunnyInterface calculateSomething() {
    return null;
}

答案 1 :(得分:0)

我建议在RuntimeException中包含一个简单的rethrow,这样你就不需要声明一个已检查的异常:

// Dummy mockup interface + function
public static interface FunnyInterface {}
public static FunnyInterface builder_someFunnyInterface() throws Exception { return null; }

public FunnyInterface calculateSomething() {
    try {
        return builder_someFunnyInterface(); // throws Exception
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

我不会返回null。如果您没有一种有意义的方法来处理错误,请将其向上传播到具有处理错误的有意义方法的级别。如果你确实想要返回null / empty,那么使用Optional,否则抛出一个未经检查的RuntimeException是可取的。