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