Java 方法调用表达式全解析
在 Java 编程中,方法调用是一项基础且关键的操作。下面将详细解析 Java 方法调用表达式的各个方面,包括方法选择、调用类型确定、编译时检查以及运行时评估等内容。
方法选择规则
在存在多个重载方法的情况下,需要确定最具体的方法。如果两个方法具有相同的签名,会考虑每个最大特定方法的返回类型(在适应任何类型参数之后)。若根据上述规则没有首选方法,当一个最大特定方法满足以下条件时会被优先选择:
- 其签名是每个最大特定方法签名的子签名。
- 对于每个最大特定方法,它是返回类型可替换的。
最具体方法抛出的异常类型从最大特定方法的 throws 子句派生而来,具体规则如下:
1. 泛型方法处理 :如果最具体方法是泛型的,throws 子句首先会适应最具体方法的类型参数;如果最具体方法不是泛型,但至少有一个最大特定方法是泛型的,throws 子句会首先被擦除。
2. 异常类型筛选 :抛出的异常类型包括满足以下约束的每个类型 E:
- E 在其中一个 throws 子句中被提及。
- 对于每个 throws 子句,E 是该子句中某个命名类型的子类型。
如果无法确定唯一的方法,方法调用将产生歧义,导致编译时错误。
方法调用类型确定
最具体可访问且适用方法的调用类型是一种方法类型,它表达了调用参数的目标类型、调用的结果(返回类型或 void)以及调用的异常类型。其确定方式如下:
- 泛型方法无显式类型参数 :如果选择的