### Question:
UTypeVar extends UType { public static UTypeVar create(String name, UType lowerBound, UType upperBound) { return new UTypeVar(name, lowerBound, upperBound); } private  UTypeVar(String name, UType lowerBound, UType upperBound); static UTypeVar create(String name, UType lowerBound, UType upperBound); static UTypeVar create(String name, UType upperBound); static UTypeVar create(String name); @Override Choice<Unifier> visitType(Type target, Unifier unifier); Key key(); String getName(); UType getLowerBound(); UType getUpperBound(); void setLowerBound(UType lowerBound); void setUpperBound(UType upperBound); @Override Type inline(Inliner inliner); @Override int hashCode(); @Override boolean equals(@Nullable Object obj); @Override String toString();  }### Answer:
@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)) .addEqualityGroup(UTypeVar.create("T", stringType, charSequenceType)) .addEqualityGroup(UTypeVar.create("T", nullType, objectType)) .addEqualityGroup(UTypeVar.create("E", nullType, charSequenceType)) .testEquals(); }
@Test public void serialization() { UType nullType = UPrimitiveType.create(TypeKind.NULL); UType charSequenceType = UClassType.create("java.lang.CharSequence", ImmutableList.<UType>of()); SerializableTester.reserializeAndAssert(UTypeVar.create("T", nullType, charSequenceType)); }