protected final MethodHandle defaultImplementationOf( Class<?> proxyClass, MethodHandles.Lookup lookup, String name,
                                                          MethodType signature )
    {
        try
        {
            if ( name.equals( "toString" ) && equals( signature, String.class, stateType ) )
            {
                return explicitCastArguments(
                        lookup.findVirtual( Object.class, "toString", methodType( String.class ) ),
                        methodType( String.class, stateType ) );
            }
            if ( name.equals( "hashCode" ) && equals( signature, int.class, stateType ) )
            {
                return explicitCastArguments( lookup.findVirtual( Object.class, "hashCode", methodType( int.class ) ),
                                              methodType( int.class, stateType ) );
            }
            if ( name.equals( "equals" ) && equals( signature, boolean.class, stateType, Object.class ) )
            {
                return insertArguments(
                        explicitCastArguments( DEFAULT_EQUALS, methodType(
                                boolean.class, Class.class, MethodHandle.class, stateType, Object.class ) ),
                        0, proxyClass, lookup.findGetter( proxyClass, "state", stateType ) );
            }
            return null;
        }
        catch ( NoSuchMethodException | IllegalAccessException | NoSuchFieldException e )
        {
            throw new RuntimeException( e );
        }
    }