### Question:
UWildcard extends UExpression implements WildcardTree { static UWildcard create(Kind kind, @Nullable UTree<?> bound) { checkArgument(BOUND_KINDS.containsKey(kind)); checkArgument((bound == null) == (kind == Kind.UNBOUNDED_WILDCARD)); return new AutoValue_UWildcard(kind, bound); }  @Override abstract Kind getKind(); @Override @Nullable abstract UTree<?> getBound(); @Override JCWildcard inline(Inliner inliner); @Override R accept(TreeVisitor<R, D> visitor, D data); @Override Choice<Unifier> visitWildcard(WildcardTree node, Unifier unifier);  }### Answer:
@Test public void equality() { UExpression objectIdent = UClassIdent.create("java.lang.Object"); UExpression setIdent = UTypeApply.create("java.util.Set", objectIdent); new EqualsTester() .addEqualityGroup(UWildcard.create(Kind.UNBOUNDED_WILDCARD, null)) .addEqualityGroup(UWildcard.create(Kind.EXTENDS_WILDCARD, objectIdent)) .addEqualityGroup(UWildcard.create(Kind.EXTENDS_WILDCARD, setIdent)) .addEqualityGroup(UWildcard.create(Kind.SUPER_WILDCARD, setIdent)) .testEquals(); }
@Test public void serialization() { SerializableTester.reserializeAndAssert( UWildcard.create(Kind.EXTENDS_WILDCARD, UClassIdent.create("java.lang.Number"))); }