public static UWildcardType create(BoundKind boundKind, UType bound) {
    return new AutoValue_UWildcardType(boundKind, bound);
  }
@Test
  public void equality() {
    UType objectType = UClassType.create("java.lang.Object", ImmutableList.<UType>of());
    UType setType = UClassType.create("java.util.Set", ImmutableList.<UType>of(objectType));

    new EqualsTester()
        .addEqualityGroup(UWildcardType.create(BoundKind.UNBOUND, objectType)) // ?
        .addEqualityGroup(UWildcardType.create(BoundKind.EXTENDS, objectType)) // ? extends Object
        .addEqualityGroup(UWildcardType.create(BoundKind.EXTENDS, setType)) // ? extends Set<Object>
        .addEqualityGroup(UWildcardType.create(BoundKind.SUPER, setType)) // ? super Set<Object>
        .testEquals();
  }