我有两个班级(例如汽车和自行车)。两个类的对象都被发送到管理层,在那里使用它们。 我通过调用layerHandler.objectReceived(object);
将每个对象发送到该层然后,LayerHandler需要将此对象存储在其HashMap中(我正在使用Object,因为存储在那里的对象不是同一类型......(Car and Bicycle))
LayerHandler还有其他方法叫做actionFired(String message,Object object); 第二个参数'对象'属于Car或Bicycle类,并且已经存储在LayerHandler的HashMap中。当这个方法发生时,我需要找到存储在HashMap中的相关对象。
现在我使用object.toString()作为hashmap的键值。两种类型的对象都使用defaut toSting()方法,该方法未被覆盖。
我不会在这里显示我的项目的整个结构,但我使用HashMap是有原因的。 (我知道ArrayList get(Object obj)方法在这里会很好,但我必须使用HashMap)
我需要知道,toString()是否总会返回不会随时间变化的相同值,因此我可以将其用作HashMap的键。
答案 0 :(得分:0)
如果你没有覆盖.toString()
那么,对于给定的实例,它将在整个实例的生命中继续返回相同的字符串。但很有可能的是,一旦这个实例被垃圾收集,这个类的另一个实例甚至另一个类将被分配到同一个内存块,并将返回与此实例相同的字符串。
但不是使用String
作为关键字,最好更改actionFired
以提供对象而不是字符串表示。这样做非常脆弱,如果你的实现稍后改变,它可能会全部破坏。
答案 1 :(得分:0)
如果你提供hashCode + equals的正确实现,那么在HashMap中有不同类型的键是没有限制的。