The Predicate <T> method is ()

I am using the interface Predicate<T>from com.google.common.base(Google Guava)

But I do not know how the method works equals()...

Why do I get falsewhen I enter something like this:

    Predicate<Object> PredicateD = new Predicate<Object>(){
          @Override public boolean apply(Object number) {
                return ((number instanceof Double) && (Math.floor((Double)number) == (Double)number));
            }    
    };

    Predicate<Object> PredicateM = new Predicate<Object>(){
          @Override public boolean apply(Object number) {
                return ((number instanceof Double) && (Math.floor((Double)number) == (Double)number));
            }    
    };

    System.out.println(PredicateD.equals(PredicateM));

Thanks in advance for your help,

+3
source share
3 answers

You create two different anonymous inner classes, but none of them overrides equals, so you get a default implementation in which any two unequal references are considered not equal.

Since the values PredicateDand PredicateMare different references, equalsreturns false.

+13
source

true, equals . , . , , .

, (, IntegerCheckingPredicate) predicateD predicateM . equals :

public boolean equals(Object o) {
    if (o instanceof IntegerCheckPredicate) {
        return true;
    }

    return false;
}

:

@Test
public void testPredicatesWithEqualsOverriddenAreEqual() {
    IntegerCheckPredicate predicateM = new IntegerCheckPredicate();
    IntegerCheckPredicate predicateD = new IntegerCheckPredicate();
    assertEquals(predicateM, predicateD);
}
0

equals(). - . Object.equals(){return (this == obj);} .

0

All Articles