class Container implements ExperimentalObject {

    @Override
    public String toString () {
        final List<Field> identifyingFields = getIdentifyingFields();
        List<String> fieldValues = Stream.concat(Stream.of("Container type: " + getClass().getSimpleName()), identifyingFields
                .stream()
                .map(field -> {
                    try {
                        return field.getName() + ":\t" + field.get(this);
                    } catch (IllegalAccessException e) {
                        log.error("Caught IllegalAccessException ", e);
                        return "";
                    }
                })).collect(Collectors.toUnmodifiableList());
        return String.join("\n\t", fieldValues);
    }

}