code: private void determineFieldType(Field field) {
          // Determine the class of data stored in the field
          Class<?> fieldType = field.getType();
  
          isCollection = Collection.class.isAssignableFrom(fieldType);
  
          valueClass=null;
          if (!isCollection) {
              // It's not a list so assume its single valued - so just take the field type
              valueClass = fieldType;
          } else {
              determineCollectionClass(fieldType);
              // It's multi-valued - so we need to look at the signature in
              // the class file to find the generic type - this is supported for class file
              // format 49 and greater which corresponds to java 5 and later.
              ParameterizedType paramType;
              try {
                  paramType = (ParameterizedType)field.getGenericType();
              } catch (ClassCastException e) {
                  throw new MetaDataException(String.format("Can't determine destination type for field %1$s in Entry class %2$s", 
                          field, field.getDeclaringClass()), e);
              }
              Type[] actualParamArguments = paramType.getActualTypeArguments();
              if (actualParamArguments.length == 1) {
                  if (actualParamArguments[0] instanceof Class) {
                      valueClass = (Class<?>)actualParamArguments[0];                    
                  } else {
                      if (actualParamArguments[0] instanceof GenericArrayType) {
                          // Deal with arrays
                          Type type=((GenericArrayType)actualParamArguments[0]).getGenericComponentType();
                          if (type instanceof Class) {
                              valueClass=Array.newInstance((Class<?>)type, 0).getClass();
                          } 
                      } 
                  }
              } 
          }
  
          // Check we have been able to determine the value class
          if (valueClass==null) {
              throw new MetaDataException(String.format("Can't determine destination type for field %1$s in class %2$s", 
                      field, field.getDeclaringClass()));
          }
      }
docs: valueClass, isList