当前位置: 首页 > 面试题库 >

类型安全性:未经检查的演员表

江仲渊
2023-03-14
问题内容

在我的spring应用程序上下文文件中,我有类似以下内容:

<util:map id="someMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String">
    <entry key="some_key" value="some value" />
    <entry key="some_key_2" value="some value" />   
</util:map>

在java类中,实现如下所示:


private Map<String, String> someMap = new HashMap<String, String>();
someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");

在Eclipse中,我看到一条警告:

类型安全性:未经检查的从Object到HashMap的转换

我做错什么了?我该如何解决该问题?


问题答案:

好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做,请使用:

private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");

其次,编译器抱怨你将对象强制转换为,HashMap而不检查它是否为HashMap。但是,即使你要这样做:

if(getApplicationContext().getBean("someMap") instanceof HashMap) {
    private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}

你可能仍然会收到此警告。问题是getBeanreturn Object,所以类型是未知的。将其HashMap直接转换为第二种情况不会引起问题(并且在第一种情况下可能不会发出警告,我不确定Java编译器对Java 5发出警告有多学问)。但是,你正在将其转换为HashMap<String, String>

HashMaps实际上是将对象作为键并将对象作为值的地图(HashMap<Object, Object>如果愿意)。因此,不能保证在获取bean时可以将其表示为a,HashMap<String, String>因为HashMap<Date, Calendar>返回的非泛型表示可以具有任何对象,因此可以将其表示为。

如果代码可以编译,并且你可以执行String value = map.get("thisString");而没有任何错误,则不必担心此警告。但是,如果映射不是完全由字符串键组成的,则ClassCastException在运行时会得到一个,因为泛型无法阻止这种情况的发生。



 类似资料:
  • 问题内容: 我尝试将一个对象强制转换为我的Action类,但是会导致警告: 感谢您的任何帮助 问题答案: 是的- 这是类型擦除的自然结果。如果确实是if 的实例,则强制转换不会捕获该实例-您只会在尝试使用它时才看到问题,传入a 而不是字符串。 您可以使用以下方法消除警告: 作为功​​能注释,但您不能轻松地解决潜在的问题:(

  • 问题内容: 我认为我得到了未经检查的演员表的含义(从一个类型转换到另一种类型),但是“检查”演员表意味着什么?如何检查演员表,以便可以避免在Eclipse中出现此警告? 问题答案: 未检查的强制转换意味着(隐式或显式)您正在从泛型类型转换为非限定类型,或者反之。例如这条线 会产生这样的警告。 通常有这样的警告是有充分的理由的,因此您应该尝试改进代码而不是禁止警告。引用来自有效Java,第二版: 消

  • 问题内容: Eclipse给我以下形式的警告: 类型安全性:未经检查的从Object到HashMap的转换 这是从对我无法控制返回对象的API的调用中得出的: 如果可能的话,我想避免Eclipse警告,因为从理论上讲,它们至少表明潜在的代码问题。不过,我还没有找到消除这种情况的好方法。我可以将涉及到的一行单独提取到一个方法中,然后添加到该方法中,从而限制了我忽略警告的代码块的影响。还有更好的选择吗

  • 问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错了什么?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做

  • 问题内容: 我被分配去做一个程序,该程序获取0-25之间的100个随机整数并将它们存储在数组中。然后,我必须调用2种方法来将偶数和几率分开(非常典型)。所以我尝试了ArrayList东西(我认为是学到的),在我遇到这个问题之前,它似乎还不错(我正在关注教程和在线内容): Unit8.java使用未经检查或不安全的操作 我的代码是这样的: } 与存在的具体的错误: 和 请帮我解决这个问题,我已尽力使

  • 我的代码:-文件1。JAVA File2.java(catlisting_xpath元素的XPATH) 错误:- JAVAlang.ClassCastException:类组织。openqa。硒。遥远的RemoteWebElement不能转换为java类。util。列表(org.openqa.selenium.remote.RemoteWebElement位于加载器“app”的未命名模块中;jav