code: public Meta<T> configure(MetaConfig config) {
      Ensure.that(config != null, "config != null");
  
      //noinspection ConstantConditions
      if (type == null && (config.getInstanceCheckPolicy() != MetaConfig.defaultConfig().getInstanceCheckPolicy())) {
        String message = "Not enough type information to guarantee equals contract. Use Meta.meta(Class) to construct this type instead.";
        throw new AssertionError(message);
      }
  
      return new Meta<>(config, this.type, this.props, this.names);
    }
docs: Some aspects of the provided methods are caller-configurable.
  Use this method to alter these aspects of the configuration.
  <p>
  If {@link #meta()} was used to instantiate the instance any changes to {@link MetaConfig.ObjectEqualsPolicy}
  will result in an error. Use {@link #meta(Class)} instead.
  
  @param config the new configuration; must not be null
  @return a new instance with the new configuration