code: @SuppressWarnings("unchecked") // child types unknown
    public ComposableRecordReader<K,TupleWritable> getRecordReader(
        InputSplit split, JobConf job, Reporter reporter) throws IOException {
      setFormat(job);
      return root.getRecordReader(split, job, reporter);
    }
docs: Construct a CompositeRecordReader for the children of this InputFormat
  as defined in the init expression.
  The outermost join need only be composable, not necessarily a composite.
  Mandating TupleWritable isn't strictly correct.