code: @SuppressWarnings("unchecked") // No static typeinfo on Tuples
    public void readFields(DataInput in) throws IOException {
      int card = WritableUtils.readVInt(in);
      values = new Writable[card];
      written = WritableUtils.readVLong(in);
      Class<? extends Writable>[] cls = new Class[card];
      try {
        for (int i = 0; i < card; ++i) {
          cls[i] = Class.forName(Text.readString(in)).asSubclass(Writable.class);
        }
        for (int i = 0; i < card; ++i) {
            values[i] = cls[i].newInstance();
          if (has(i)) {
            values[i].readFields(in);
          }
        }
      } catch (ClassNotFoundException e) {
        throw (IOException)new IOException("Failed tuple init").initCause(e);
      } catch (IllegalAccessException e) {
        throw (IOException)new IOException("Failed tuple init").initCause(e);
      } catch (InstantiationException e) {
        throw (IOException)new IOException("Failed tuple init").initCause(e);
      }
    }
docs: {@inheritDoc}