繁体   English   中英

类型安全性:未经检查的从Object到T(Java)的转换

[英]Type safety: Unchecked cast from Object to T (Java)

我正在用键T和值Long制作一个HashMap,而我的remove方法(从AbstractCollection类重写)如下所示:

 public boolean remove(Object o) {
    if(denseBag.containsKey(o)){
        if(denseBag.get(o) == 1L){
            denseBag.remove(o);
        } else {
            Long removed = denseBag.get(o);
            T theO = (T) o;
            denseBag.replace(theO, removed, removed--); 
        }
    } else {
        return false;
    }

我收到消息:“类型安全:未经检查的从Object到T的转换”。 我只想确保它可以正常运行。 谢谢。

它会。 出于遗留原因,Java在Collections中使用Object o签名。
如果仍然困扰您,请使用@SuppressWarnings("unchecked")

但是,您仍然会遇到很多其他麻烦。

这将被忽略: removed-- ,use --removed

据我所知,您的代码将正常运行。 如果可以的话,建议您将方法的声明更改为

public boolean remove(T o)

使用此功能,您不需要不需要检查的强制转换,这会使您的代码更简单一些。 如果您不能并且在我们说您的代码正确时相信我们,请使用Alexey Soshin所说的@SuppressWarnings("unchecked") 并考虑将转换因素分解为单独的方法castToT(Object obj)或您希望调用的方法。 该标签的优点是下次您从编译器或IDE收到友好警告时,您知道它不仅是您一次选择忽略的旧警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM