default boolean willAllowId(final Object id) {
                if (!supportsUserSuppliedIds()) return false;
                if (supportsCustomIds())
                    throw new UnsupportedOperationException("The default implementation is not capable of validating custom ids - please override");

                return supportsAnyIds() || (supportsStringIds() && id instanceof String)
                        || (supportsNumericIds() && id instanceof Number) || (supportsUuidIds() && id instanceof UUID);
            }
Determines if an identifier will be accepted by the {@link Graph}.  This check is different than
what identifier internally supports as defined in methods like {@link #supportsNumericIds()}.  Those
refer to internal representation of the identifier.  A {@link Graph} may accept an identifier that
is not of those types and internally transform it to a native representation.
<p/>
Note that this method only applies if {@link #supportsUserSuppliedIds()} is {@code true}. Those that
return {@code false} for that method can immediately return false for this one as it allows no ids
of any type (it generates them all).
<p/>
The default implementation will immediately return {@code false} if {@link #supportsUserSuppliedIds()}
is {@code false}.  If custom identifiers are supported then it will throw an exception.  Those that
return {@code true} for {@link #supportsCustomIds()} should override this method. If
{@link #supportsAnyIds()} is {@code true} then the identifier will immediately be allowed.  Finally,
if any of the other types are supported, they will be typed checked against the class of the supplied
identifier.
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java