我已经阅读了这些页面上有关类强制转换异常的许多其他问题,并且我想确定我的问题本质上是相同的(即与在运行时与编译时相比不知道类的绑定类型有关)。
所以这是我的测试课......
public class testCastReturn{
public test(){
HashSet<String> StringHash; //a simple hash set
HashMap(<String, ComplexObject> ObjectInfo; //the String value is the name of the complexObject, and complexObject has multiple members (in this instance it is a java model for a database field so it has info pertaining to Key, size etc)
//create a ComplexObject here
addToObjectInfo(aComplexObject); // add it into the HashMap
//repeat above a number of times....
//now collect the 'names' of those objects
StringHash = getObjectKeys();
}
public void addToObjectInfo(complexObject c){
//put a complex object into the HashMap
ObjectInfo.put(c.getNameID, c); //create a set of key value pairs where the name of the object is the key to get the actual object
}
public HashSet<String> getObjectKeys(){
//retrieve the keys only
return HashSet<String> this.ObjectInfo.keySet(); //fails with classCastException
//this however works
HashSet<String> temp = new HashSet<String>(this.ObjectInfo.keySet());
return temp;
}
}//end class
如果我的理解是正确的,这就是为什么我可以以任何一种形式编译我的代码,但我只能运行我明确创建一个临时位置来保存密钥集的代码,因为作为运行时,JVM 不能保证绑定的类型是什么键将在 ComplexObject 中。请记住,这是人为的版本,所以可能过于简化了,在我的实际代码中,我使用的是“构建器”,然后将信息传递给“最终”类,然后这些类中的一堆被保存在三分之一内具有 ComplexObjects 的 HashMap 的对象。
如果您需要任何进一步的信息,请询问(如果您愿意,我什至可以发送我的图书馆的副本)。
大卫