public override bool Equals(object obj)
        {
            if (!(obj is StandardReferenceTypeHandler))
            {
                return(false);
            }
            StandardReferenceTypeHandler other = (StandardReferenceTypeHandler)obj;

            if (ClassMetadata() == null)
            {
                return(other.ClassMetadata() == null);
            }
            return(ClassMetadata().Equals(other.ClassMetadata()));
        }
        public virtual object DeepClone(object context)
        {
            TypeHandlerCloneContext      typeHandlerCloneContext = (TypeHandlerCloneContext)context;
            StandardReferenceTypeHandler cloned = (StandardReferenceTypeHandler)Reflection4.NewInstance
                                                      (this);

            if (typeHandlerCloneContext.original is StandardReferenceTypeHandler)
            {
                StandardReferenceTypeHandler original = (StandardReferenceTypeHandler)typeHandlerCloneContext
                                                        .original;
                cloned.ClassMetadata(original.ClassMetadata());
            }
            else
            {
                // New logic: ClassMetadata takes the responsibility in
                //           #correctHandlerVersion() to set the
                //           ClassMetadata directly on cloned handler.
                //            if(_classMetadata == null){
                //                throw new IllegalStateException();
                //            }
                cloned.ClassMetadata(_classMetadata);
            }
            return(cloned);
        }