接口和实现签名不匹配

时间:2015-03-27 02:04:05

标签: java jar interface

如果一个jar有一个接口,该接口带有一个由另一个jar中的类实现的方法,并且该接口添加了抛出已检查异常并在没有重新编译实现类的情况下进行部署,会发生什么?

1 个答案:

答案 0 :(得分:0)

我理解有人可能认为类加载器最好不要在标题中捕获异常并让你声明将它放在实现中。

但是,这是有效的Java

public interface GetFive {

  int getFive() throws Exception;

}

public class GetFiveImpl implements GetFive {

  int getFive() {
     return 5;
  }
}

这是有效的,因为即使您的界面显示可以,也不需要抛出异常。

在无法捕获异常的块中使用GetFive.getFive()无效。 GetFiveImpl.getFive()在一个块中,它没有捕获异常就可以了。

即使你有一个在接口上工作的块,该块也是在一个永远不会引发异常的环境中编译的;所以,它会工作得很好。不过,我不会将此作为一种常见做法。

我对此进行了测试,结果证实了我的怀疑。这并不意味着永远这样做是个好主意;但是,在考虑了一段时间之后,依赖jar无法在不重新编译的情况下抛出异常,这将重新检查接口。