gpt4 book ai didi

java - 了解 java return 语句中的类转换异常

转载 作者:行者123 更新时间:2023-11-29 08:06:40 28 4
gpt4 key购买 nike

我在这些页面上阅读了一些关于类转换异常的其他问题,我想确定我的问题本质上是同一件事(即与在运行时不知道类的绑定(bind)类型相关在编译期间)。

所以这是我的测试类....

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 不能保证什么键的绑定(bind)类型将在 ComplexObject 中。请记住,这是人为设计的版本,因此可能过于简单化了,在我的实际代码中,我使用的是“构建器”,然后将信息传递给“最终化”类,然后这些类中的一些被保存在第三个类中具有 ComplexObjects 的 HashMap 的对象。

如果您需要任何进一步的信息,请询问(如果您愿意,我什至可以发送我的图书馆的副本)。

大卫

最佳答案

keySet() 返回一个 Set,而不是 HashSet。所以 return this.ObjectInfo.keySet(); 应该这样做。

一个经验法则:总是通过接口(interface)而不是类来引用集合(和一般的对象)。所以更喜欢 ListSet 而不是 ArrayListHashSet。仅当实例化对象或需要特定于具体实现的某些功能时才使用具体类型。

关于java - 了解 java return 语句中的类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10720117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com