@Override
    public boolean equals(Object other) {
        if (!(other instanceof Match)) {
            return false;
        }
        Match<T> that = (Match<T>) other;
        return this.matchAny == that.matchAny &&
               Objects.equals(this.value, that.value) &&
               this.negation == that.negation;
    }
@Test
    public void testEquals() {
        Match<String> m1 = Match.any();
        Match<String> m2 = Match.any();
        Match<String> m3 = Match.ifNull();
        Match<String> m4 = Match.ifValue("bar");
        assertEquals(m1, m2);
        assertFalse(Objects.equal(m1, m3));
        assertFalse(Objects.equal(m3, m4));
        Object o = new Object();
        assertFalse(Objects.equal(m1, o));
    }