Using .class on a type parameter isn't allowed - because of type erasure, W will have been erased to Component at runtime. InputField will need to also take a Class from the caller, like InputFieldArray:
public InputField(String labelText, Class clazz)
{
super(new String[] {labelText}, clazz);
}