### Question:
OptionalBlock implements ContainerBlock { @Override public boolean equals(Object o) { if (o == this) { return true; } else if (o instanceof OptionalBlock) { OptionalBlock gb = (OptionalBlock) o; return Objects.equal(filters, gb.filters) && blocks.equals(gb.blocks); } else { return false; } } OptionalBlock(List<Block> blocks, Predicate... filters); @Override Predicate not(); @SuppressWarnings("unchecked") @Override R accept(Visitor<R, C> v, C context); @Override Class<? extends Boolean> getType(); List<Block> getBlocks(); @Nullable Predicate getFilters(); @Override BooleanExpression exists(); @Override int hashCode(); @Override boolean equals(Object o); @Override String toString();  }### Answer:
@Test public void Equals() { Block block1 = Blocks.optional(Blocks.SPOC); Block block2 = Blocks.optionalFilter(Blocks.SPOC, QNODE.o.lit().lt("X")); assertFalse(block1.equals(block2)); }