code: public static <T extends Tuple> TypeInformation<T> TUPLE(Class<T> tupleSubclass) {
  		final TypeInformation<T> ti = TypeExtractor.createTypeInfo(tupleSubclass);
  		if (ti instanceof TupleTypeInfo) {
  			return ti;
  		}
  		throw new InvalidTypesException("Tuple type expected but was: " + ti);
  	}
docs: Returns type information for typed subclasses of Flink's {@link org.apache.flink.api.java.tuple.Tuple}.
  Typed subclassed are classes that extend {@link org.apache.flink.api.java.tuple.Tuple0} till
  {@link org.apache.flink.api.java.tuple.Tuple25} to provide types for all fields and might add
  additional getters and setters for better readability. Additional member fields must not be added.
  A tuple must not be null.
  
  <p>A tuple is a fixed-length composite type for storing multiple values in a
  deterministic field order. Fields of a tuple are typed. Tuples are the most efficient composite
  type; a tuple does not support null-valued fields unless the type of the field supports nullability.
  
  <p>The generic types for all fields of the tuple can be defined in a hierarchy of subclasses.
  
  <p>If Flink's type analyzer is unable to extract a tuple type information with
  type information for all fields, an {@link org.apache.flink.api.common.functions.InvalidTypesException}
  is thrown.
  
  <p>Example use:
  <pre>
  {@code
  class MyTuple extends Tuple2<Integer, String> {
  
  public int getId() { return f0; }
  
  public String getName() { return f1; }
  }
  }
  
  Types.TUPLE(MyTuple.class)
  </pre>
  
  @param tupleSubclass A subclass of {@link org.apache.flink.api.java.tuple.Tuple0} till
  {@link org.apache.flink.api.java.tuple.Tuple25} that defines all field types and
  does not add any additional fields