FeatureSet extends PredicateValue { @Override public int hashCode() { return (key.hashCode() + values.hashCode()) * 31; } FeatureSet(String key, String... values);  FeatureSet(String key, Collection<String> values); FeatureSet setKey(String key); String getKey(); FeatureSet addValue(String value); FeatureSet addValues(Collection<String> values); FeatureSet setValues(Collection<String> values); Set<String> getValues(); @Override FeatureSet clone(); @Override int hashCode(); @Override boolean equals(Object obj);  }
@Test public void requireThatHashCodeIsImplemented() { assertEquals(new FeatureSet("key").hashCode(), new FeatureSet("key").hashCode()); }