Closed
Description
static class SomeGeneric<T> {
private final T value;
protected SomeGeneric(T value) {
this.value = value;
}
}
class NonStaticInnerWithGenericFieldInSuper<T> extends SomeGeneric<T> {
public NonStaticInnerWithGenericFieldInSuper(T value) {
super(value);
}
}
@Test
void capturesEnclosingTypeParameterOfNonStaticInnerClass() {
assertThat(PreferredConstructorDiscoverer.discover(NonStaticInnerWithGenericFieldInSuper.class)).satisfies(ctor -> {
assertThat(ctor.getParameters()).hasSize(2);
assertThat(ctor.getParameters().get(0).getName()).isEqualTo("this$0");
assertThat(ctor.getParameters().get(1).getName()).isEqualTo("value");
});
}
It seems Constructor.getGenericParameterTypes()
does only return the enclosing types one. Using Constructor.getParameters()
can help read the Type
via Parameter.getParameterizedType
of each Parameter
.