Getters et setters pour les tableaux

J'ai quelques questions à propos de getters et setters pour les tableaux. Supposons que nous avons une classe de ce genre, ce qui rend une copie privée d'un tableau dans son constructeur:

import java.util.Arrays;

public class Foo
{
    private int[] array;

    public Foo(int[] array) {
        this.array = Arrays.copyOf(array, array.length);
    }
}

Nous voulons que le tableau ne soit accessible/muté via les accesseurs et mutateurs. Si nous avons un getter qui ressemble à ceci:

public int[] getArray() {
    return array;
}

il défait le but de la lecture que nous sommes de retour d'une référence qui permet à l'utilisateur de modifier directement les éléments du tableau. par exemple,

Foo foo = new Foo(someArray);
...
int[] bar = foo.getArray();
bar[0] = 123; //Now foo.array[0] = 123 and we haven't used a setter!

Donc vraisemblablement nous avons besoin de quelque chose comme ceci:

public int getElement(int index) {
    return array[index];
}

De même pour les setters. Mais si nous faisons les choses par élément de base, nous allons aussi avoir besoin de fournir un moyen d'obtenir la longueur:

public int getArrayLength() {
    return array.length;
}

C'est déjà un peu désordre pour un 1-dimensions tableau, mais disons que nous avons un tableau multidimensionnel à la place:

import java.util.Arrays;

public class Foo
{
    private int[][][] array;

    public Foo(int[][][] array) {
        //Code for making a deep copy here
    }

    public int getElement(int i, int j, int k) {
        return array[i][j][k];
    }

    public void setElement(int i, int j, int k, int value) {
        array[i][j][k] = value;
    }

    public int getArrayLength() {
        return array.length;
    }

    public int getArrayLength(int i) {
        return array[i].length;
    }

    public int getArrayLength(int i, int j) {
        return array[i][j].length;
    }
}

C'est beaucoup de code pour une tâche triviale, et plus important encore, c'est un gâchis d'utiliser effectivement. Faut-il vraiment retrouver avec quelque chose comme cela, ou est-il une meilleure façon de le faire? Je l'ai cherché partout et il ne semble pas être une "norme" pour cela.

avez-vous regardé les listes?
Les tableaux sont donc des années 1900.

OriginalL'auteur | 2011-07-12