### Question:
QualifiedType { private QualifiedType(Type type, Set<Annotation> qualifiers) { this.type = type; this.qualifiers = qualifiers; } private  QualifiedType(Type type, Set<Annotation> qualifiers); static QualifiedType<T> of(Class<T> clazz); static QualifiedType<?> of(Type type); @SuppressWarnings("unchecked") static QualifiedType<T> of(GenericType<T> type); QualifiedType<T> with(Annotation... newQualifiers); @SafeVarargs final QualifiedType<T> with(Class<? extends Annotation>... newQualifiers); QualifiedType<T> withAnnotations(Iterable<? extends Annotation> newQualifiers); QualifiedType<T> withAnnotationClasses(Iterable<Class<? extends Annotation>> newQualifiers); Type getType(); Set<Annotation> getQualifiers(); QualifiedType<?> mapType(Function<Type, Type> mapper); Optional<QualifiedType<?>> flatMapType(Function<Type, Optional<Type>> mapper); boolean hasQualifier(Class<? extends Annotation> qualifier); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testQualifiedType() { assertThat(QualifiedType.of(String.class).with(NVarchar.class)) .isEqualTo(QualifiedType.of(String.class).with(NVarchar.class)) .hasSameHashCodeAs(QualifiedType.of(String.class).with(NVarchar.class)) .hasToString("@org.jdbi.v3.core.qualifier.NVarchar() java.lang.String"); assertThat(QualifiedType.of(int.class)) .isEqualTo(QualifiedType.of(int.class)) .hasSameHashCodeAs(QualifiedType.of(int.class)) .hasToString("int"); assertThat(QualifiedType.of(new GenericType<List<String>>() {})) .isEqualTo(QualifiedType.of(new GenericType<List<String>>() {})) .hasSameHashCodeAs(QualifiedType.of(new GenericType<List<String>>() {})) .hasToString("java.util.List<java.lang.String>"); assertThat(QualifiedType.of(String.class).with(foo(1), bar("1"))) .isEqualTo(QualifiedType.of(String.class).with(foo(1), bar("1"))) .isEqualTo(QualifiedType.of(String.class).with(bar("1"), foo(1))) .hasSameHashCodeAs(QualifiedType.of(String.class).with(foo(1), bar("1"))) .hasSameHashCodeAs(QualifiedType.of(String.class).with(bar("1"), foo(1))) .isNotEqualTo(QualifiedType.of(int.class).with(bar("1"), foo(1))) .isNotEqualTo(QualifiedType.of(String.class).with(bar("2"), foo(1))) .isNotEqualTo(QualifiedType.of(String.class).with(bar("1"), foo(2))) .isNotEqualTo(QualifiedType.of(String.class).with(foo(1))) .isNotEqualTo(QualifiedType.of(String.class).with(bar("1"))); }