@@ -230,6 +230,23 @@ def __repr__(self):
230230 """
231231 return "[{0:s}:0x{1:X}]".format(self.name, self.serialVersionUID)
232232
233+ def __eq__(self, other):
234+ """
235+ Equality test between two Java classes
236+
237+ :param other: Other JavaClass to test
238+ :return: True if both classes share the same fields and name
239+ """
240+ if not isinstance(other, type(self)):
241+ return False
242+
243+ return (self.name == other.name and
244+ self.serialVersionUID == other.serialVersionUID and
245+ self.flags == other.flags and
246+ self.fields_names == other.fields_names and
247+ self.fields_types == other.fields_types and
248+ self.superclass == other.superclass)
249+
233250
234251class JavaObject(object):
235252 """
@@ -263,11 +280,32 @@ def __repr__(self):
263280 name = self.classdesc.name
264281 return "<javaobj:{0}>".format(name)
265282
283+ def __eq__(self, other):
284+ """
285+ Equality test between two Java classes
286+
287+ :param other: Other JavaClass to test
288+ :return: True if both classes share the same fields and name
289+ """
290+ if not isinstance(other, type(self)):
291+ return False
292+
293+ res = (self.classdesc == other.classdesc and
294+ self.annotations == other.annotations)
295+ if not res:
296+ return False
297+
298+ for name in self.classdesc.fields_names:
299+ if not (getattr(self, name) == getattr(other, name)):
300+ return False
301+ return True
302+
266303 def copy(self, new_object):
267304 """
268305 Returns a shallow copy of this object
269306 """
270307 new_object.classdesc = self.classdesc
308+ new_object.annotations = self.annotations
271309
272310 for name in self.classdesc.fields_names:
273311 new_object.__setattr__(name, getattr(self, name))
0 commit comments