class NamespacedEntityIdWithType extends EntityIdWithType implements NamespacedEntityId {

    @Override
    public boolean isCompatibleOrThrow(@Nullable final EntityIdWithType otherEntityId) {
        final boolean result;
        if (null == otherEntityId) {
            result = false;
        } else if (equals(otherEntityId)) {
            result = true;
        } else if (!Objects.equals(getEntityType(), otherEntityId.getEntityType())) {
            result = false;
        } else if (otherEntityId instanceof NamespacedEntityIdWithType) {
            result = isNamespaceAndNameCompatible((NamespacedEntityId) otherEntityId);
        } else {
            result = false;
        }
        if (!result) {
            throw getIllegalArgumentExceptionForDifferentEntityIds(otherEntityId);
        }
        return result;
    }

    protected  NamespacedEntityIdWithType(final NamespacedEntityId namespacedEntityId);

}