public static UTypeVar create(String name, UType lowerBound, UType upperBound) {
    return new UTypeVar(name, lowerBound, upperBound);
  }
@Test
  public void equality() {
    UType nullType = UPrimitiveType.create(TypeKind.NULL);
    UType objectType = UClassType.create("java.lang.Object", ImmutableList.<UType>of());
    UType charSequenceType = UClassType.create("java.lang.CharSequence", ImmutableList.<UType>of());
    UType stringType = UClassType.create("java.lang.String", ImmutableList.<UType>of());

    new EqualsTester()
        .addEqualityGroup(UTypeVar.create("T", nullType, charSequenceType))
        // T extends CharSequence
        .addEqualityGroup(UTypeVar.create("T", stringType, charSequenceType))
        // T extends CharSequence super String
        .addEqualityGroup(UTypeVar.create("T", nullType, objectType))
        // T extends Object
        .addEqualityGroup(UTypeVar.create("E", nullType, charSequenceType))
        // E extends CharSequence
        .testEquals();
  }