code: @PublicEvolving
  	public static <X extends Tuple> TupleTypeInfo<X> getBasicTupleTypeInfo(Class<?>... basicTypes) {
  		if (basicTypes == null || basicTypes.length == 0) {
  			throw new IllegalArgumentException();
  		}
  		
  		TypeInformation<?>[] infos = new TypeInformation<?>[basicTypes.length];
  		for (int i = 0; i < infos.length; i++) {
  			Class<?> type = basicTypes[i];
  			if (type == null) {
  				throw new IllegalArgumentException("Type at position " + i + " is null.");
  			}
  			
  			TypeInformation<?> info = BasicTypeInfo.getInfoFor(type);
  			if (info == null) {
  				throw new IllegalArgumentException("Type at position " + i + " is not a basic type.");
  			}
  			infos[i] = info;
  		}
  
  		@SuppressWarnings("unchecked")
  		TupleTypeInfo<X> tupleInfo = (TupleTypeInfo<X>) new TupleTypeInfo<Tuple>(infos);
  		return tupleInfo;
  	}
docs: --------------------------------------------------------------------------------------------