Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不匹配的接口和实现签名_Java_Jar_Interface - Fatal编程技术网

Java 不匹配的接口和实现签名

Java 不匹配的接口和实现签名,java,jar,interface,Java,Jar,Interface,如果一个jar与另一个jar中的类实现的方法有接口,会发生什么,接口添加了抛出选中的异常并在不重新编译实现类的情况下进行部署?我理解,如果类加载器不在头中捕获异常并让您声明在实现中抛出异常,可能会认为这样做最有利于类加载器 然而,这是有效的Java public interface GetFive { int getFive() throws Exception; } public class GetFiveImpl implements GetFive { int getFiv

如果一个jar与另一个jar中的类实现的方法有接口,会发生什么,接口添加了抛出选中的异常并在不重新编译实现类的情况下进行部署?

我理解,如果类加载器不在头中捕获异常并让您声明在实现中抛出异常,可能会认为这样做最有利于类加载器

然而,这是有效的Java

public interface GetFive {

  int getFive() throws Exception;

}

public class GetFiveImpl implements GetFive {

  int getFive() {
     return 5;
  }
}
它是有效的,因为您不需要抛出异常,即使您的接口指示您可以抛出异常

无效的是在未捕获异常的块中使用GetFive.GetFive。GetFiveImpl.getFive在一个块中。AT不捕获异常是可以的

即使您有一个在接口上工作的块,该块也是在一个永远不会引发异常的环境中编译的;所以,它可以很好地工作。不过,我不会让这成为一种惯例


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

这是一个非常好的问题。在使用Java超过15年后,其中一个罕见的例子让我思考了一会儿。不过,如果我发现你在我的团队里做这件事,我会这样总结,不要再做了。