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: Nous voulons que la matrice soit accessible / muté uniquement via les getters et les setters. Si nous avons un getter qui ressemble à ceci: p> 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;
}
}
4 Réponses :
Que pensez-vous Je pense que la meilleure question est de savoir pourquoi, à ce stade, exposez-vous que ArrayList code> fait ou
vecteur code> avant de cela? p>
foo code> 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 code> ou quelque chose et faire
foo code> une implémentation concrète c'est soutenu par la liste. P>
En relation avec la première partie, votre getter ne ressemble pas au constructeur?
Un tableau multidimensionnel est également un tableau 1 dimensions: c'est ça. P> 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. P> p> int [A] [b] [c] code> est vraiment juste
int [a * b * c] code >, donc le problème se résume à, comment fournissez-vous l'accès en toute sécurité? Tout simplement comme ça:
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); Code>
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.
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]