我有以下代码:
class IncidentTag:
def __init__(self,tag):
self.tag = tag
def equals(self,obj):
return self.tag.equals(obj.tag)
def hashCode(self):
return self.tag.hashCode()
from java.lang import String
from java.util import HashMap
from java.util import HashSet
tag1 = IncidentTag(String("email"))
tag1copy = IncidentTag(String("email"))
tag2 = IncidentTag(String("notemail"))
print tag1.equals(tag1copy)
print tag2.equals(tag2)
print "Now with HashSet:"
hSet = HashSet()
hSet.add(tag1)
hSet.add(tag2)
print hSet.contains(tag1)
print hSet.contains(tag2)
print hSet.contains(tag1copy)输出为:1 1现在,HashSet为:1 1 0
但是,我希望最后一行也是true(1)。我是不是明显漏掉了什么。
(是的,我知道我的equals方法和hashcode方法没有考虑到一些问题……它们故意很简单,但一定要让我知道是不是那里的问题导致了这个问题。)
发布于 2008-10-23 17:33:02
我用Java编写了等效的代码,它确实为所有三个contains()调用生成了true。所以我认为这一定是Jython中的一个奇怪之处。也许底层的Java对象与您在Python中看到的并不完全相同。
https://stackoverflow.com/questions/230585
复制相似问题