ArrayList <map> </map>的Java强制转换

时间:2013-02-05 10:18:19

标签: java casting arraylist

很抱歉,我对Java不是很有经验。 我正在使用eclipse作为IDE。 Eclispe抱怨我无法理解的未经检查的演员。 请参阅代码snipet。 如何正确地做到这一点?

public Liberty2Server(ArrayList<Map<String,String>> libertySourceFiles , String basePath) throws FileNotFoundException , IllegalArgumentException {
    // check input file path
    for( Object map : libertySourceFiles) {
        Map<String,String> mp = (Map<String,String>) map ;  // <==Eclipse complains here: Unchecked cast from Object to Map<String,String>

欢迎任何提示

罗尔夫

4 个答案:

答案 0 :(得分:3)

您可以更改for循环并在集合中使用显式类型:

for(Map<String,String> map : libertySourceFiles) {
    Map<String,String> mp = map; //probably not needed any more
}

答案 1 :(得分:2)

这意味着您正在执行编译器无法检查的强制转换是否安全。

警告您必须检查它是否安全。

更好的解决方案是使用

消除对强制转换的需求
for(Map<String, String> mp : libertySourceFiles) {

答案 2 :(得分:0)

Eclipse抱怨,因为您想要将Object投射到Map<String, String>。将正在运行的变量map的类型更改为Map<String, String>,一切都会好的。您甚至不需要变量mp

答案 3 :(得分:0)

这里的问题是你将ArrayList<Map<String,String>>元素转换为Object,然后将其向下转换为泛型类型。 解决方案很简单:

public Liberty2Server(ArrayList<Map<String,String>> libertySourceFiles , String basePath) throws FileNotFoundException , IllegalArgumentException {
    // check input file path
    for(  Map<String,String> mp : libertySourceFiles) {
      //  Map<String,String> mp = (Map<String,String>) map ; Not needed anymore
      ....