public static MetadataListStructObjectInspector getInstance(
      List<String> columnNames) {
    List<List<String>> key = Collections.singletonList(columnNames);
    MetadataListStructObjectInspector result = cached.get(key);
    if (result == null) {
      result = new MetadataListStructObjectInspector(columnNames);
      MetadataListStructObjectInspector prev = cached.putIfAbsent(key, result);
      if (prev != null) {
        result = prev;
      }
    }
    return result;
  }
StructObjectInspector works on struct data that is stored as a Java List or
Java Array object. Basically, the fields are stored sequentially in the List
object.

The names of the struct fields and the internal structure of the struct
fields are specified in the ctor of the StructObjectInspector.
serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/MetadataListStructObjectInspector.java