@Test public void genericErasureWorkaround() { SubjectFactory<StringSubject, String> factory = new SubjectFactory<StringSubject, String>() { @Override public StringSubject getSubject(FailureStrategy fs, String target) { return new StringSubject(fs, target); } }; assertThat(factory.getSubjectClass()).isEqualTo(StringSubject.class); }
public String build() { Class<?> subjectClass = subjectFactory.getSubjectClass(); List<Method> methods = Arrays.asList(subjectClass.getMethods()); Class<?> targetType = ReflectionUtil.typeParameter(subjectClass, TARGET_TYPE_PARAMETER); StringBuilder methodWrappers = new StringBuilder(); for (Method m : methods) { appendMethodWrapper(methodWrappers, subjectClass, targetType, m); } String code = String.format( CLASS_TEMPLATE, subjectClass.getPackage().getName(), subjectClass.getSimpleName(), targetType.getCanonicalName(), methodWrappers.toString()); return code; }
public IteratingWrapperClassBuilder(SubjectFactory<?, ?> subjectFactory) { this.subjectFactory = subjectFactory; this.className = subjectFactory.getSubjectClass().getCanonicalName() + ITERATING_WRAPPER; }