如何从无效方法中得出返回值

时间:2012-10-26 00:41:03

标签: java interface

这是我的代码:

deleteStuffFromDb(); // void method
deleteStuffFromCache();

deleteStuffFromDb()是一个返回类型为void的接口方法。

理想情况下,第一种方法会返回一个值(成功/失败)。此返回值将确定第二个方法是否执行。

我可以修改界面,因为它被2个类调用。然而,作为一个没有全面了解系统的O& M开发人员,我仍然有可能破坏某些东西。

你如何建议我确定这个void deleteStuffFromDb()的执行是否决定了deleteStuffFromCache()的执行。

以下是我认为的一些方法:

  1. 在deleteStuffFromDb()周围放置一个try / catch,为错误情况抛出异常。如果遇到catch(),则不要执行deleteStuffFromCache()。
  2. 将deleteStuffFromCache()的逻辑放入方法deleteStuffFromDb()中,并允许/禁止在此方法中执行
  3. ...?
  4. 请将您的想法和理由告诉我。

    感谢。

4 个答案:

答案 0 :(得分:2)

  

我可以修改界面,因为它被2个类调用。   但是,作为一个没有开发人员的O& M开发人员,仍有风险   系统的全貌

如果系统的全貌是它只在两个地方使用,你当然应该改变它们。完整的重新编译和系统测试将揭示是否有任何其他因素被破坏。

答案 1 :(得分:1)

deleteStuffFromDb()的签名重写为deleteStuffFromDb(Object returnObject)

然后编写一个包装器接口来替换旧签名deleteStuffFromDb()

在包装器界面中,执行:

void deleteStuffFromDb() {
     // initialize some dummy returnObject that doesnt get used
     deleteStuffFromDb(dummyObject);
}

要使用此系统,请将returnObject传递给界面以捕获返回值。

这样,您可以根据需要从界面中获取返回值,但不会破坏使用旧界面的现有调用。

答案 2 :(得分:0)

我认为将返回类型从void更改为其他内容会破坏任何现有代码。

如果返回类型为void,那么使用它的任何代码都不会期望从该方法返回任何内容。如果确实如此,那么它也会破裂。

现在,如果你更改它并从方法返回一些值,那么在现有代码的情况下,返回的值将被忽略。

您不能使用void方法,该方法应该返回某个值,但您可以反过来。

我能想到的唯一情况是,如果有很多该接口的实现,那么改变它可能是一个问题。

就第二点而言,我更愿意将逻辑保留在它所属的位置。可能只是调用方法本身。

答案 3 :(得分:0)

不确定这听起来有多好,但我已经看到了这些方法(例如Scanner.html#next()根据失败原因抛出NoSuchElementExceptionIllegalStateException。还有更多这样的例子) ,这是为了在失败的情况下成功抛出异常,例如

 public void deleteStuffFromDb(){
      ..... usual code..
      if (failedCondition){
           throw new RuntimeErrorException(new Error("Couldn't delete"));
      }
 }

在来电方面,如果你得到抛出的异常,你可以假设,这是一个失败,否则成功。这样就可以避免更改界面。