### Question:
Coalesce extends MutableExpressionBase<T> { public final Coalesce<T> add(Expression<T> expr) { value = null; this.exprs.add(expr); return this; } Coalesce(Class<? extends T> type, Expression<?>... exprs);  Coalesce(Expression... exprs); @Override R accept(Visitor<R,C> v, C context); ComparableExpression<T> getValue(); DslExpression<T> as(Path<T> alias); DslExpression<T> as(String alias); final Coalesce<T> add(Expression<T> expr); OrderSpecifier<T> asc(); OrderSpecifier<T> desc(); final Coalesce<T> add(T constant); BooleanExpression asBoolean(); DateExpression<T> asDate(); DateTimeExpression<T> asDateTime(); EnumExpression<?> asEnum(); NumberExpression<?> asNumber(); StringExpression asString(); TimeExpression<T> asTime(); @Override boolean equals(Object o);  }### Answer:
@Test public void mutable() { Coalesce<String> c = new Coalesce<String>(firstname, lastname).add("xxx"); assertEquals("coalesce(firstname, lastname, xxx)", c.toString()); assertEquals("coalesce(firstname, lastname, xxx, yyy)", c.add("yyy").toString()); }
@Test public void withList() { Coalesce<String> c = new Coalesce<String>(firstname, lastname).add("xxx"); assertEquals("coalesce(firstname, lastname, xxx)", c.toString()); }
@Test public void withSingleArg() { Coalesce<String> c = new Coalesce<String>().add("xxx"); assertEquals("coalesce(xxx)", c.toString()); }
@Test public void withoutWarnings() { Coalesce<String> c = new Coalesce<String>(String.class).add(firstname).add(lastname); assertEquals("coalesce(firstname, lastname)", c.toString()); }