我正在使用一个旧的 API,它有一个返回 Collection<? 扩展 T>; API 表示返回的结果是不可修改的。根据《Effective Java》,返回有界通配符被认为是不好的形式。我已经实现了一个包装函数,因此新代码看起来很干净。确实如此
Collection<? extends T> c0 = oldAPI();
Collection<T> c = (Collection<T>)c0; // "unchecked cast" warning
return c;
Run Code Online (Sandbox Code Playgroud)
演员阵容在所有情况下都“安全”吗?最多?如果不是,有什么例子吗?
看起来演员阵容是安全的,并且经过有限的测试,一切都按预期进行。A@suppressWarnings("unchecked")避免发出警告。
也许安全的原因是返回的集合是不可修改的。
它是安全的,因为集合是不可修改的。也就是说,有一种巧妙而简单的方法可以利用这一点:
Collection<T> c = Collections.unmodifiableCollection(c0);
Run Code Online (Sandbox Code Playgroud)
...这实际上强制了不可修改性并允许您以这种方式向上转换。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |