@Override
        public TraversalStrategyProxy<T> createObject(final Map<String, Object> data) {
            final BaseConfiguration config = new BaseConfiguration();

            // if the clazz is a TraversalStrategyProxy, that means it was loaded from reference as one, rather than
            // an explicit strategy instance like one defined as "g:HaltedTraverserStrategy". in this case, we would
            // want to get the class right. we don't update clazz or else it gets cached in the type resolver
            final Class clasz;
            final Map<String,Object> mapConf = (Map<String,Object>) data.get("conf");
            if (null == this.clazz || this.clazz == TraversalStrategyProxy.class) {
                try {
                    clasz = Class.forName(data.get("fqcn").toString());
                } catch (Exception ex) {
                    throw new IllegalArgumentException("Could not load class " + mapConf.get("fqcn").toString(), ex);
                }
            } else {
                clasz = this.clazz;
            }

            config.setListDelimiterHandler(GremlinDisabledListDelimiterHandler.instance());
            for (Map.Entry<String, Object> entry : mapConf.entrySet()) {
                config.setProperty(entry.getKey(), entry.getValue());
            }
            return new TraversalStrategyProxy<>(clasz, config);
        }
Deserializers that make reflection calls can use this class as a base and thus cache reflected methods to avoid
future lookups.
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java