3

Effective Java 2nd Edition说我们不应该在新代码中使用原始类型,并且我们还必须尝试消除所有未经检查的强制转换警告,并在我们选择禁止此类警告时证明并记录其安全性。

但是,我反复看到一种特殊的用法,它以类型安全的方式结合了原始类型和未经检查的强制转换。在其最典型的形式中,我们有:

  • static final使用原始类型声明并引用不可变对象的字段
  • static使用未经检查的强制类型转换返回此字段的参数化版本的通用方法

这种“模式”最著名的例子见于java.util.Collections

问题是:

  • 这个成语叫什么?
  • 以前在哪些权威资料中讨论过这个成语?

也可以看看

  • 有效的 Java 第 2 版
    • 第 23 条:不要在新代码中使用原始类型
    • 第 24 条:消除未经检查的警告
4

1 回答 1

1

在你的三个例子中,真正发生的是内存优化,因为Collection你使用的是类行为的一个子集,而不依赖于任何依赖于参数化类型的东西,你可以重用原始实例。

你可以写emptyList()如下

private static <T> List<T> emptyList() {
    return new EmptyList<T>();
}

行为上的唯一区别是Collections.emptyList() == Collections.emptyList()会返回 false。

我不确定这是否已被命名,但从文档的角度来看,一条评论说“不需要参数化行为,因此可以重用静态实例”几乎涵盖了它。

于 2010-10-19T07:28:18.067 回答