Java 将对象与自定义匹配器进行比较

Java 将对象与自定义匹配器进行比较,java,junit,mockito,hamcrest,Java,Junit,Mockito,Hamcrest,嗨,我有两个要比较的对象集合,它们的类型不同,但属性相同。例子: ObjA: 和ObjB: public class ObjB { private String aaa; private String bbb; private String ccc; private ObjX xxx; //getters and setters } 目前,我比较了它的手动,属性的属性。有没有更好的解决办法?如果没有,您能给我一些提示或示例,说明如何为比较列表和列表编写自

嗨,我有两个要比较的对象集合,它们的类型不同,但属性相同。例子: ObjA:

和ObjB:

public class ObjB {
    private String aaa;
    private String bbb;
    private String ccc;
    private ObjX xxx;
    //getters and setters
}
目前,我比较了它的手动,属性的属性。有没有更好的解决办法?如果没有,您能给我一些提示或示例,说明如何为比较
列表
列表
编写自定义匹配器吗?谢谢

编辑: 我决定编写自定义matcher,它扩展了
TypeSafeMatcher
,当我比较字符串值时,matcher决定相等,但当我比较对象ObjX时,它被标记为不匹配。 代码:

public类ObjAMatcher扩展了TypeSafeMatcher{

匹配将公共功能(属性)提取到基类,然后比较基类。
public class ObjB {
    private String aaa;
    private String bbb;
    private String ccc;
    private ObjX xxx;
    //getters and setters
}
public class ObjAMatcher extends TypeSafeMatcher<ObjA> {
    Matcher<? super String> aaa;
    Matcher<? super String> bbb;
    Matcher<? super String> ccc;
    Matcher<? super ObjX> xxx;

    public ObjAMatcher(ObjB entity) {
        aaa = is(entity.getAaa());
        bbb = is(entity.getBbb());
        ccc = is(entity.getCcc());
        xxx = is(entity.getXxx());
    }

    @Override
    protected boolean matchesSafely(ObjB objB) {
        boolean equals = true;
        match &= aaa.matches(objB.getAaa()); // true
        match &= bbb.matches(objB.getBbb()); // true
        match &= ccc.matches(objB.getCcc()); // true
        match &= xxx.matches(objB.getXxx()); // false
        return match;
    }
    // ...
}