首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于可复制的getObjectCopy(),如何证明为什么未检查的强制转换是正确的

关于可复制的getObjectCopy(),如何证明为什么未检查的强制转换是正确的
EN

Stack Overflow用户
提问于 2014-01-29 03:39:45
回答 1查看 98关注 0票数 3

(这是对我的previous question的跟进。)

我有一个名为Copyable的接口,它只有一个函数

代码语言:javascript
运行
复制
Copyable getObjectCopy();

这是许多其他类使用的。因为这个函数总是返回一个Copyable,所以它会导致未检查的强制转换。示例:

代码语言:javascript
运行
复制
@SuppressWarnings("unchecked")  //Copy of itself is the same type.
ValidateValue<L> vvo = (ValidateValue<O>)this_toCopy.getValidator().getObjectCopy();
vvBlkA = vvo;

我的问题涉及乔希·布洛奇的建议(“有效Java”,第二版,第24项):

每次使用@SuppressWarnings("unchecked")注释时,都会添加一个注释,说明为什么这样做是安全的。

他的榜样是

代码语言:javascript
运行
复制
// 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页底部:Ch05.pdf)

我喜欢这个主意,我想用getObjectCopy()

代码语言:javascript
运行
复制
@SuppressWarnings("unchecked")  //Copy of itself is the same type.
ValidateValue<L> vvo = (ValidateValue<O>)this_toCopy.getValidator().getObjectCopy();
vvBlkA = vvo;

我的评论似乎很蹩脚,但我想不出比这更好的了。这就是我的问题:为什么这个未经检查的广播是合理的?什么是有意义的评论,实际上将帮助未来的开发人员,这意味着,实际上,不仅仅是“相信我”?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 05:18:34

我们现在在爪哇5+世界!用户概论。

可以将Copyable的签名更改为如下所示:

代码语言:javascript
运行
复制
interface Copyable<T extends Copyable> {
    T getObjectCopy();
}

现在,您的ValidateValue<L>值应该是如下所示:

代码语言:javascript
运行
复制
puvlic class ValidateValue<L> implements Copyable<ValidateValue<L>> {
    ...
}

每个人(包括编译器)都会很高兴!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21421576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档