(这是我之前的问题的后续。)
我有一个名为 的接口Copyable
,它只有一个功能
Copyable getObjectCopy();
这被许多其他类使用。因为这个函数总是返回 a Copyable
,所以它会导致未经检查的强制转换。例子:
@SuppressWarnings("unchecked") //Copy of itself is the same type.
ValidateValue<L> vvo = (ValidateValue<O>)this_toCopy.getValidator().getObjectCopy();
vvBlkA = vvo;
我的问题与 Josh Bloch 的建议有关(在 Effective Java,第 2 版,第 24 项中):
每次使用 @SuppressWarnings("unchecked") 注释时,请添加注释说明为什么这样做是安全的。
他的例子是
// This cast is correct because the array we're creating
// is of the same type as the one passed in, which is T[].
@SuppressWarnings("unchecked")
T[] result = (T[]) Arrays.copyOf(elements, size, a.getClass());
return result;
(见第 9 / 117 页底部:http: //www.infoq.com/resource/articles/bloch-effective-java-2e/en/resources/Bloch_Ch05.pdf)
我喜欢这个主意,我想和它一起getObjectCopy()
@SuppressWarnings("unchecked") //Copy of itself is the same type.
ValidateValue<L> vvo = (ValidateValue<O>)this_toCopy.getValidator().getObjectCopy();
vvBlkA = vvo;
我的评论似乎很蹩脚,但我想不出更好的了。这就是我的问题:为什么这种未经检查的演员是合理的?什么是真正可以帮助未来开发人员的有意义的评论,这意味着比“只要相信我”更有效吗?