我正在尝试编译以下代码:
private String dataToString(){ Map data = (HashMap) getData(); String toString = ""; for( MyClass.Key key: data.keySet() ){ toString += key.toString() + ": " + data.get( key ); return toString; }
我在for行中遇到错误:
incompatible types found : java.lang.Object required: MyClass.Key
该getData()
方法返回一个Object
(但在这种情况下Object
返回的HashMap
结构). MyClass.Key
是我为我的应用程序创建的枚举(在另一个类文件中MyClass
).
当我创建一个具有相同结构的foreach循环时MyClass.java
,我没有遇到这个问题.
我究竟做错了什么?
一种稍微有效的方法:
Mapdata = (HashMap ) getData(); StringBuffer sb = new StringBuffer(); for (Map.Entry entry : data.entrySet()) { sb.append(entry.getKey()); sb.append(": "); sb.append(entry.getValue()); } return sb.toString();
如果可能的话,定义"getData",这样你就不需要演员了.
更改:
Map data = (HashMap) getData();
至
Mapdata = (HashMap ) getData();
问题是,如果数据只是a ,则data.keySet()
返回Collection
a Map
.一旦你使它通用,keySet()
将返回一个Collection
.甚至更好......迭代entrySet()
,这将是一个Collection
.它避免了额外的哈希查找.
我在java论坛上找到了这个简单的例子.它的语法与List的foreach非常相似,这正是我所寻求的.
import java.util.Map.Entry; HashMap nameAndAges = new HashMap(); for (Entry entry : nameAndAges.entrySet()) { System.out.println("Name : " + entry.getKey() + " age " + entry.getValue()); }
[编辑:]我测试了它,它完美地工作.