@@ -115,7 +115,7 @@ public final class ImmutableClass
```
现在该测试我们的课程了:
现在该测试我们的类了:
```java
...
...
@@ -153,13 +153,13 @@ class TestMain
除了您编写的类,JDK 本身还有很多不可变的类。 给出了这样的 Java 不可变类的列表。
1.串
2. 包装器类,例如 Integer,Long,Double 等。
3. 不可变的集合类,例如 Collections.singletonMap()等。
4.java.lang.StackTraceElement
1.`String`
2. 包装器类,例如`Integer`,`Long`,`Double`等。
3. 不可变的集合类,例如`Collections.singletonMap()`等。
4.`java.lang.StackTraceElement`
5. Java 枚举(理想情况下应该如此)
6.java.util.Locale
7.java.util.UUID
6.`java.util.Locale`
7.`java.util.UUID`
## 3\. 使类不可变的好处
...
...
@@ -171,9 +171,9 @@ class TestMain
4. 不需要克隆的实现
5. 允许 [`hashCode()`](//howtodoinjava.com/java/related-concepts/working-with-hashcode-and-equals-methods-in-java/"Working with hashCode and equals methods in java") 使用延迟初始化,并缓存其返回值
6. 用作字段时不需要防御性地复制
7.制作好[映射键和 Set 元素](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/"How hashmap works in java")(在集合中这些对象不得更改状态)
7.作为良好的[映射和集合的键](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/"How hashmap works in java")(在集合中这些对象不得更改状态)
* 即使`@FunctionalInterface`注释将被省略 ,功能接口也是 ***有效。 它仅用于通知编译器在接口内部强制使用单个[抽象方法](//howtodoinjava.com/object-oriented/exploring-interfaces-and-abstract-classes-in-java/ "Exploring interfaces and abstract classes in java")。***
* Conceptually, a functional interface has exactly one abstract method. Since [**default methods**](//howtodoinjava.com/java8/default-methods-in-java-8/"Default methods in java 8") have an implementation, they are not abstract. Since default methods are not abstract you’re ***free to add default methods to your functional interface as many as you like***.