1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Create 改进的类型推断.md

- 与README.md同步
This commit is contained in:
haiqiang 2019-03-12 23:42:34 +08:00 committed by GitHub
parent 46901e584d
commit dfa077245b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,30 @@
##              改进的类型推断
### 1.什么是类型推断
类型推断就像它的字面意思一样,编译器根据<b><i>你显示声明的已知的信息</i></b> 推断出你没有显示声明的类型,这就是类型推断。
看过《Java编程思想 第四版》的朋友可能还记得里面讲解泛型一章的时候,里面很多例子是下面这样的:
```java
Map<String, Object> map = new Map<String, Object>();
```
而我们平常写的都是这样的:
```java
Map<String, Object> map = new Map<>();
```
这就是类型推断《Java编程思想 第四版》这本书出书的时候最新的JDK只有1.6(JDK7推出的类型推断)在Java编程思想里Bruce Eckel大叔还提到过这个问题
(可能JDK的官方人员看了Bruce Eckel大叔的Thinking in Java才加的类型推断☺)在JDK7中推出了上面这样的类型推断可以减少一些无用的代码。
(Java编程思想到现在还只有第四版是不是因为Bruce Eckel大叔觉得Java新推出的语言特性“然并卵”呢/滑稽)
<br>
在JDK7中类型推断只有上面例子的那样的能力即只有在使用**赋值语句**时才能自动推断出泛型参数信息(即<>里的信息)下面的官方文档里的例子在JDK7里会编译
错误
```java
List<String> stringList = new ArrayList<>();
stringList.add("A");
//error : addAll(java.util.Collection<? extends java.lang.String>)in List cannot be applied to (java.util.List<java.lang.Object>)
stringList.addAll(Arrays.asList());
```
但是上面的代码在JDK8里可以通过也就说JDK8里类型推断不仅可以用于赋值语句而且可以根据代码中上下文里的信息推断出更多的信息因此我们需要些的代码
会更少。加强的类型推断还有一个就是用于Lambda表达式了。
<br>
大家其实不必细究类型推断在日常使用中IDE会自动判断当IDE自己无法推断出足够的信息时就需要我们额外做一下工作比如在<>里添加更多的类型信息,
相信随着Java的进化这些便利的功能会越来越强大。
<!-- --------------------------------------------------- 改进的类型推断结束------------------------------------------------- -->