9.4.5 Java8改进的类型推断
9.4.5 Java8改进的类型推断
Java8
改进了泛型方法的类型推断能力,类型推断主要有如下两方面。
- 可通过调用方法的上下文来推断泛型的目标类型。
- 可在方法调用链中,将推断得到的泛型传递到最后一个方法。
如下程序示范了Java8
对泛型方法的类型推断。
1 | class MyUtil<E> { |
上面程序中代码1和代码2的作用完全相同,但第代码1无须在调用 MyUtil
类的nil
方法时显式指定泛型参数为 String
,这是因为程序需要将该方法的返回值赋值给 MyUtil<String>
类型,因此系统可以自动推断出此处的泛型参数为String
类型。
上面程序代码3和代码4的作用也完全相同,但代码3也无须在调用yul
类的nil
方法时显式指定泛型参数为 Integer
,这是因为程序将nil
方法的返回值作为了 MyUtil
类的 cons()
方法的第二个参数,而程序可以根据cons()
方法的第一个参数(42)推断出此处的泛型参数为 Integer
类型。
需要指出的是,虽然Java8
增强了泛型推断的能力,但泛型推断不是万能的,例如如下代码就是错误的。
1 | // 希望系统能推断出调用nil()方法类型参数为String类型, |
因此,上面这行代码必须显式指定泛型的实际类型,即将代码改为如下形式
1 | String s = MyUtil.<String>nil().head(); |