Java方法引用中潜在适用方法的查找与判定规则疑问
Java方法引用中潜在适用方法的判定疑问
interface Fun<T,R> { R apply(T arg); } class C { int size() { return 0; } static int size(Object arg) { return 0; } void test() { Fun<C, Integer> f1 = C::size; } }
我在分析上述代码中C::size方法引用指向的具体方法时,对照JLS 15.13.1规范,确定待查找的类型为类C。
根据规范中关于潜在适用方法的判定规则:给定目标函数类型有n个参数,若方法引用为ReferenceType::Identifier形式,潜在适用方法包含两类:
- 名称为
Identifier、参数数量为n、类型参数为TypeArguments,且在同一类中进行方法调用时属于潜在适用的成员方法 - 参数数量为
n-1的同类情况
但这里我有个核心疑问:规范里提到的「假设的方法调用」并没有提供实参类型,那该如何判定「方法调用的第i个实参与方法的第i个参数类型潜在兼容」?举个例子,如果在类C中新增方法static int size(String arg),这个方法会不会被算作潜在适用方法?
需要说明的是,我的疑问和Stack Overflow上的相关问题不同,核心聚焦在方法引用场景下,规范中依赖的「假设调用」信息不足导致的判定逻辑困惑。
内容的提问来源于stack exchange,提问作者user24723440
相关产品推荐
相关产品推荐

