class Container implements ExperimentalObject {

    public long getIdentity () {
        final List<Field> identifyingFields = getIdentifyingFields();
        final List<String> identifyingFieldValues = identifyingFields.stream().map(field -> {
            try {
                return field.get(this);
            } catch (IllegalAccessException e) {
                log.error("Caught IllegalAccessException ", e);
                return null;
            }
        }).filter(Objects::nonNull).map(Object::toString).filter(s -> s.length() > 0).collect(Collectors.toUnmodifiableList());
        String identity = String.join("$$$$$", identifyingFieldValues);
        byte[] primitiveByteArray = identity.getBytes();
        CRC32 checksum = new CRC32();
        checksum.update(primitiveByteArray);
        return checksum.getValue();
    }

}