关于Map.entrySet()的疑惑

前几天项目用到Map,接着调用Map.entrySet(),结果产生了一些意外的后果.
就是,持久化数据数据的时候出现setter of com.hiber.Hibernate.Test.id 异常.
此异常是提醒,pojo里面未有属性的getter.
因为我在其他方法里面保存过,未曾出现异常,觉得甚是奇怪.后来发现,原来是Map.entrySet()搞的鬼,根据java api.
    返回此映射中包含的映射关系的 set 视图。返回的 set 中的每个元素都是一个 Map.Entry。该 set 受映射支持,所以对映射的改变可在此 set 中反映出来,反之亦然。如果修改映射的同时正在对该 set 进行迭代(除了通过迭代器自己的 remove 操作,或者通过在迭代器返回的映射项上执行 setValue 操作外),则迭代结果是不明确的。set 支持通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作实现元素移除,即从映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
    为此,我写了一个测试代码.
public class TestMap {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Map test = new HashMap();
		
		//测试,put进TestObject
		for(int i=0; i<5; i++){
			TestObject to = new TestObject();
			test.put(new Integer(i), to);
		}
		
		//输出,这里进行类型强制转换,出现java.lang.ClassCastException.
		for(Iterator it = test.entrySet().iterator(); it.hasNext();){
			
			TestObjectt = (TestObject)it.next();
			t.toString();
			//System.out.println(t.);
		}

               //输出,这里直接转换成Object,并且输出的是自己定义的toString()
               //且可以正常输出,为此,我不理解.为什么转换的时候保存.
               //估计是里面做了些什么手脚.
		for(Iterator it = test.entrySet().iterator(); it.hasNext();){
			
			TestObjectt = (TestObject)it.next();
			t.toString();
			//System.out.println(t.);
		}

	}
	

}

class TestObject{
	public String toString(){
		System.out.println("TestObject");
		return null;
	}
}

你可能感兴趣的:(数据结构,Hibernate)