Exception规范是否是方法签名的一部分?我的意思是:
public void someMethod(String myString) throws IOException
Run Code Online (Sandbox Code Playgroud)
是' 抛出IOException '这个方法签名的一部分?
谢谢
跟进Jon Skeet的回答并回应评论
@ Jon Skeet为什么然后我无法使用public void run()在实现Runnable的类中抛出IOException? - 知道我认识你
Java语言规范(第3版)的第8.4.6节说:
覆盖或隐藏另一个方法(第8.4.8节)的方法(包括实现
abstract接口中定义的方法的方法)可能不会被声明为抛出比重写或隐藏方法更多的已检查异常.更确切地说,假设乙是一个类或接口,和阿是一个超类或超接口的乙,和方法声明Ñ在乙覆盖或隐藏方法声明米在甲.如果n有一个
throws提及任何已检查异常类型的子句,那么m必须有一个throws子句,并且对于n的throws子句中列出的每个已检查的异常类型,必须在删除该子句时出现相同的异常类或其一个超类型.m ; 否则,发生编译时错误.throws
这不是方法签名的问题,而是要求调用者不必考虑他们正在调用的"原始"方法不需要检查的异常.
如果两个方法具有相同的名称和参数类型,则它们具有相同的签名.
如果满足以下所有条件,则两个方法或构造函数声明M和N具有相同的参数类型:
它们具有相同数量的形式参数(可能为零)它们具有相同数量的类型参数(可能为零)设为M的形式类型参数,并且为N的形式类型参数.重命名每个出现的Bi后N的类型为Ai,对应的类型变量的边界和M和N的参数类型是相同的.
因此,两个具有相同名称和参数但具有不同声明异常的方法,它们具有相同的签名.
此外,从文件Bozho引用:
定义:方法声明的两个组件包括方法签名 - 方法的名称和参数类型.
没有提到那里的例外......
编辑:至于重写方法(或实现接口),请参见第8.4.8.3节:
方法声明不得具有与它覆盖或隐藏的任何方法冲突(第8.4.6节)的throws子句; 否则,发生编译时错误.
| 归档时间: |
|
| 查看次数: |
3848 次 |
| 最近记录: |