### Question:
UTypeApply extends UExpression implements ParameterizedTypeTree { public static UTypeApply create(UExpression type, List<UExpression> typeArguments) { return new AutoValue_UTypeApply(type, ImmutableList.copyOf(typeArguments)); }  static UTypeApply create(UExpression type, List<UExpression> typeArguments); static UTypeApply create(UExpression type, UExpression... typeArguments); static UTypeApply create(String type, UExpression... typeArguments); @Override abstract UExpression getType(); @Override abstract ImmutableList<UExpression> getTypeArguments(); @Override @Nullable Choice<Unifier> visitParameterizedType(
      ParameterizedTypeTree typeApply, @Nullable Unifier unifier); @Override Kind getKind(); @Override R accept(TreeVisitor<R, D> visitor, D data); @Override JCTypeApply inline(Inliner inliner);  }### Answer:
@Test public void equality() { new EqualsTester() .addEqualityGroup( UTypeApply.create( UClassIdent.create("java.util.List"), UClassIdent.create("java.lang.String"))) .addEqualityGroup( UTypeApply.create( UClassIdent.create("java.util.Set"), UClassIdent.create("java.lang.String"))) .addEqualityGroup( UTypeApply.create( UClassIdent.create("java.util.List"), UClassIdent.create("java.lang.Integer"))) .testEquals(); }
@Test public void serialization() { SerializableTester.reserializeAndAssert( UTypeApply.create( UClassIdent.create("java.util.List"), UClassIdent.create("java.lang.String"))); }