subsignature什么是签名(signature)方法签名组成:方法名+参数列表(参数的类型、个数、顺序)
Java语言层面规定的签名是不包含返回值类型的;JVM层面规定的签名是包含返回值类型的 。常见于:重写和重载
什么是子签名(subsignature)假定有两个方法m和n,m和n具有相同的方法名 , 相同的参数列表,并且n的形参类型在调整(类型擦除)之后和m的形参类型相同 。此时我们就可以说:方法m的签名是方法n的签名的子签名 。举个例子:
interface M { void m(List list);}interface N { void m(List<String> list);}interface Demo extends M,N{ //正因为M.m是子签名,所以Demo也是一个函数式接口 //M.m可以覆盖N.m,所以Demo这里选择的是M.m}上面代码中的M.m的签名就是N.m签名的子签名,因为N.m的签名经过类型擦除之后就是M.m的签名 。
子签名的概念旨在表示两种方法之间的关系,这些方法的签名不完全相同,但是其中一个可以覆盖另一个方法 。具体来说 , 它允许签名不使用泛型类型的方法覆盖该方法的任何泛化版本 。
return-type-substitutablereturn-type-substitutable 翻译到中文的意思就是:返回类型可替换 。借用上面的例子:
interface M { List<String> m(List list);}interface N { List m(List<String> list);}interface Demo extends M,N{}其中,M.m的返回值是
List<String>
,N.m的返回值List
, 两者可以兼容,即它们的返回类型可替换 。什么意思呢?看看下面这个代码也许你就会明白 。//这个例子只是为了更好理解List m(List list){ return n(list);}List<String> n(List<String> list){ return m(list);}也就是说M.m的返回值可以接受N.m的返回值,反过来也是 。
详细了解可以看下官方Java语言规范§8.4.5
知乎关于Java8 Functional Interface 疑问的解
【什么是subsignature和return-type-substitutable】
推荐阅读
- 召唤与合成2燃灯人格对应几号答案是什么
- 云顶之弈换形射手阵容玩法是什么
- 荣耀v40的充电功率是多少_荣耀v40的闪充功率是多少
- 荣耀x20评测_荣耀x20评测表现
- 小米平板5配置参数_小米平板5参数详细
- iPhone SE3最新消息_iPhone SE3有什么最新消息吗
- 中山市南头镇的邮编是什么 中山市南头镇
- 这才是使用ps命令的正确姿势
- Ansible 批处理实战
- 元气骑士气宗斗转星移技能什么效果