### Question:
PropertyValue { @Override public boolean equals(java.lang.Object object) { if (object == null) { return false; } if (object == this) { return true; } if (object.getClass() != getClass()) { return false; } PropertyValue other = (PropertyValue) object; return new EqualsBuilder() .append(getMetaData(), other.getMetaData()) .append(getValue(), other.getValue()) .isEquals(); } PropertyValue();  PropertyValue(java.lang.Object value); java.lang.Object getValue(); void setValue(java.lang.Object value); java.util.Map<String, java.lang.Object> getMetaData(); void setMetaData(java.util.Map<String, java.lang.Object> value); @Override boolean equals(java.lang.Object object); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void equals() { assertEquals(new PropertyValue(), new PropertyValue()); PropertyValue p1, p2; p1 = new PropertyValue(); p2 = new PropertyValue(); p1.setValue("a string value"); assertNotEquals(p1, p2); p2.setValue("a string value"); assertEquals(p1, p2); java.util.Map<String, java.lang.Object> metadata1, metadata2; metadata1 = new HashMap<>(); p1.setMetaData(metadata1); metadata2 = new HashMap<>(); p2.setMetaData(metadata2); assertEquals(p1, p2); metadata1.put("somekey", true); assertNotEquals(p1, p2); metadata2.put("anotherkey", false); assertNotEquals(p1, p2); metadata1.put("anotherkey", false); metadata2.put("somekey", true); assertEquals(p1, p2); }