mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2025-01-27 04:40:35 +08:00
update 33. 优先考虑类型安全的异构容器
This commit is contained in:
parent
ab38697e35
commit
577142bec5
@ -6,7 +6,7 @@
|
||||
|
||||
作为这种方法的一个简单示例,请考虑一个 `Favorites` 类,它允许其客户端保存和检索任意多种类型的 favorite 实例。 该类型的 `Class` 对象将扮演参数化键的一部分。其原因是这 `Class` 类是泛型的。 类的类型从字面上来说不是简单的 `Class`,而是 `Class<T>`。 例如,`String.class` 的类型为 `Class<String>`,`Integer.class` 的类型为 `Class<Integer>`。 当在方法中传递字面类传递编译时和运行时类型信息时,它被称为类型令牌(type token)[Bracha04]。
|
||||
|
||||
`Favorites` 类的 `API` 很简单。 它看起来就像一个简单 `Map` 类,除了该键是参数化的以外。 客户端在设置和获取 favorites 实例时呈现一个 `Class` 对象。 这里是 API:
|
||||
`Favorites` 类的 `API` 很简单。 它看起来就像一个简单 `Map` 类,除了该键是参数化的以外。 客户端在设置和获取 favorites 实例时呈现一个 `Class` 对象。 如下是 API:
|
||||
|
||||
```java
|
||||
// Typesafe heterogeneous container pattern - API
|
||||
@ -34,7 +34,7 @@ public static void main(String[] args) {
|
||||
}
|
||||
```
|
||||
|
||||
正如你所期望的,这个程序打印 `Java cafebabe Favorites`。 请注意,顺便说一下,`Java` 的 `printf` 方法与 C 语言的不同之处在于,应该使用cn,而在 C 中使用\n。%n 生成适用的特定于平台的行分隔符,该分隔符在很多但不是所有平台上都是\n。
|
||||
正如你所期望的,这个程序打印 `Java cafebabe Favorites`。 请注意,顺便说一下,`Java` 的 `printf` 方法与 C 语言的不同之处在于,你应该在 C 中使用 \n 的地方改用 %n。%n 用于生成适用于特定平台的行分隔符,在大多数平台上面的值为 \n,但并不是所有平台的分隔符都为 \n。
|
||||
|
||||
`Favorites` 实例是类型安全的:当你请求一个字符串时它永远不会返回一个整数。 它也是异构的:与普通 Map 不同,所有的键都是不同的类型。 因此,我们将 `Favorites` 称为类型安全异构容器(typesafe heterogeneous container)。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user