/**
* Base class for various bits of metadata attached to a {@link MetadataShardDataTreeSnapshot}. This class is not
* an interface because we want to make sure all subclasses implement the externalizable proxy pattern, for which
* we need to force {@link #writeReplace()} to be abstract. We do that by making it final and exposing a protected
* {@link #externalizableProxy()} method.
/**
* Base class for various bits of metadata attached to a {@link MetadataShardDataTreeSnapshot}. This class is not
* an interface because we want to make sure all subclasses implement the externalizable proxy pattern, for which
* we need to force {@link #writeReplace()} to be abstract. We do that by making it final and exposing a protected
* {@link #externalizableProxy()} method.