class CubeId {

    @NonNull
    public CubeId child(@NonNull String... dimensionValues) throws IllegalArgumentException {
        if (this.dimensionsValues.length + dimensionValues.length > dimensionIds.length) {
            throw new IllegalArgumentException("Too much values");
        }
        for (String o : dimensionValues) {
            if (o == null) {
                throw new IllegalArgumentException("Dimension values cannot be null");
            }
        }
        return new CubeId(dimensionIds, Arrays2.concat(this.dimensionsValues, dimensionValues));
    }

    private  CubeId(@NonNull String[] dimensionIds, @NonNull String[] dimensionsValues);

}