AbstractCombinedPredicate extends AbstractPredicate<ENTITY> implements CombinedPredicate<ENTITY> { @Override public Type getType() { return type; } private  AbstractCombinedPredicate(
            final Type type,
            final List<Predicate<? super ENTITY>> predicates); @Override Stream<Predicate<? super ENTITY>> stream(); @Override int size(); @Override Type getType(); @Override abstract CombinedPredicate<ENTITY> and(Predicate<? super ENTITY> other); @Override abstract CombinedPredicate<ENTITY> or(Predicate<? super ENTITY> other); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }
@Test void testGetType() { final CombinedPredicate<Integer> or = CombinedPredicate.or(MOD2, MOD4); assertEquals(CombinedPredicate.Type.OR, or.getType()); final CombinedPredicate<Integer> and = CombinedPredicate.and(MOD2, MOD4); assertEquals(CombinedPredicate.Type.AND, and.getType()); final CombinedPredicate<Integer> orComposed = CombinedPredicate.or(and, or); assertEquals(CombinedPredicate.Type.OR, orComposed.getType()); final CombinedPredicate<Integer> andComposed = CombinedPredicate.and(and, or); assertEquals(CombinedPredicate.Type.AND, andComposed.getType()); }