@Test
public void firstTest() throws NoSuchFieldException {
Generic generic = new Generic(AnotherWrapper.class);
Assert.assertEquals(AnotherWrapper.class.getSimpleName(), generic.toString());
Assert.assertEquals(AnotherWrapper.class, generic.clazz);
Assert.assertEquals(ListWrapper.class, generic.parent.clazz);
Assert.assertEquals(Wrapper.class, generic.parent.parent.clazz);
Assert.assertEquals(Object.class, generic.parent.parent.parent.clazz);
Assert.assertEquals(null, generic.parent.parent.parent.parent);
Generic type = generic.getGenericType(Wrapper.class.getDeclaredField("value"));
Assert.assertEquals(List.class, type.clazz);
Assert.assertEquals(Wrapper.class, type.typeParameters[0].clazz);
Assert.assertEquals(String.class, type.typeParameters[0].typeParameters[0].clazz);
}