@Override
    public void nextVector(ColumnVector previousVector, boolean[] isNull, final int batchSize,
        FilterContext filterContext, ReadPhase readPhase) throws IOException {
      if (vectors == null) {
        super.nextVector(previousVector, isNull, batchSize, filterContext, readPhase);
        return;
      }
      // Note: we assume that batchSize will be consistent with vectors passed in.
      // This is rather brittle; same in other readers.
      vectors.get(vectorIndex++).shallowCopyTo(previousVector);
      if (vectorIndex == vectors.size()) {
        vectors = null;
      }
    }
We choose to use a toy programming language, so we cannot use multiple inheritance.
If we could, we could have this inherit TreeReader to contain the common impl, and then
have e.g. SettableIntTreeReader inherit both Settable... and Int.. TreeReader-s.
Instead, we have a settable interface that the caller will cast to and call setBuffers.
ql/src/java/org/apache/hadoop/hive/ql/io/orc/encoded/EncodedTreeReaderFactory.java