11
votes

Getters et setters pour tableaux

J'ai quelques questions sur Getters et Setters pour les tableaux. Supposons que nous ayons une classe comme celle-ci, qui fait une copie privée d'un tableau dans son constructeur: xxx pré>

Nous voulons que la matrice soit accessible / muté uniquement via les getters et les setters. Si nous avons un getter qui ressemble à ceci: p> xxx pré>

Il défait le but de la getter car nous renvoyons une référence permettant à l'utilisateur de modifier directement les éléments du déployer. E.g. P>

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;
    }
}


0 commentaires

4 Réponses :


1
votes

Que pensez-vous ArrayList fait ou vecteur avant de cela?

Je pense que la meilleure question est de savoir pourquoi, à ce stade, exposez-vous que foo est soutenu par un tableau du tout? Si vous essayez de l'encapsuler, vous n'avez pas besoin d'avoir des accesseurs et des setters partout. Si vous essayez simplement de créer un wrapper de classe autour de la matrice, je vous suggérerais d'avoir une interface, appelez-le intlist ou quelque chose et faire foo une implémentation concrète c'est soutenu par la liste.


0 commentaires

1
votes

En relation avec la première partie, votre getter ne ressemble pas au constructeur? XXX


0 commentaires

9
votes

Un tableau multidimensionnel est également un tableau 1 dimensions: int [A] [b] [c] est vraiment juste int [a * b * c] , donc le problème se résume à, comment fournissez-vous l'accès en toute sécurité? Tout simplement comme ça: xxx

c'est ça.

Les appelants ont une copie en toute sécurité du tableau et peuvent l'utiliser de manière complète des tableaux normaux sont utilisés. Pas besoin de méthodes de délégatrice.


2 commentaires

Et si le tableau est nul? N'a-t-il pas une exception de pointeur Null?


@ Brooklyn99 Si la matrice peut être nulle, bien sûr la tâche pour cela: retour group == null? NULL: Arrays.CopyOf (Array, Array.Length);



0
votes

J'ai écrit une petite API pour des tableaux génériques multidimensionnels. Là, vous avez des getters, des setters pour chaque élément, quelles que soient vos dimensions.

MDDAJ sur Github p>

Voici un exemple: Création d'une matrice de chaîne 5 dimensions: p>

MDDAPseudo<String> c = new MDDAPseudo<String>(10,20,5,8,15);
c.set("xyz", 0,0,2,1,0); // setter indices: [0][0][2][1][0]
String s = c.get(0,0,0,0,0); // getter indices [0][0][0][0][0]


0 commentaires