code: public TypeInformation<?>[] getParameterTypes(Class<?>[] signature) {
  		final TypeInformation<?>[] types = new TypeInformation<?>[signature.length];
  		for (int i = 0; i < signature.length; i++) {
  			try {
  				types[i] = TypeExtractor.getForClass(signature[i]);
  			} catch (InvalidTypesException e) {
  				throw new ValidationException(
  					"Parameter types of scalar function " + this.getClass().getCanonicalName() +
  					" cannot be automatically determined. Please provide type information manually.");
  			}
  		}
  		return types;
  	}
docs: Returns {@link TypeInformation} about the operands of the evaluation method with a given
  signature.
  
  <p>In order to perform operand type inference in SQL (especially when <code>NULL</code> is
  used) it might be necessary to determine the parameter {@link TypeInformation} of an
  evaluation method. By default Flink's type extraction facilities are used for this but might
  be wrong for more complex, custom, or composite types.
  
  @param signature signature of the method the operand types need to be determined
  @return {@link TypeInformation} of operand types