2013-02-05 72 views
0

不好意思说,我对Java不是很有经验。 我使用eclipse作为IDE。 Eclispe抱怨未经检查的演员,我不明白。 请参考代码snipet。 如何使这个权利一般?Java Array ArrayList <Map>

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> 

任何暗示是值得欢迎的

罗尔夫

+2

提示可能与您的直接问题无关。只要我开始传递复杂的集合构图(例如地图列表),我就创建了一个表示并包含它的特定对象。它使得代码不那么冗长,你可以在*一个*地方实现人口/迭代和前/后条件 –

回答

0

Eclipse的抱怨,要删除铸造的需要,因为你想投的ObjectMap<String, String>。将运行变量map的类型更改为Map<String, String>,一切都会好起来的。那么你甚至不需要变量mp

+0

作品完美!非常感谢 – user2042521

3

你可以改变你的for循环,并在集合中使用显式类型:

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

这意味着你执行的是投其编译器无法检查是否安全。

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

更好的解决方案是使用

for(Map<String, String> mp : libertySourceFiles) { 
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 
     .... 
相关问题