Si vous trouvez qu'il existe une méthode de définition dans une interface:
String public [] getParameters ();
Alors vous devriez réfléchir sérieusement. Le tableau est non seulement à l'ancienne, mais nous avons des raisons raisonnables d'éviter l'exposition. Dans cet article, je vais essayer de résumer les défauts du tableau dans l'API Java. Commencez par l'un des exemples les plus inattendus.
Le tableau conduit à de mauvaises performances
Vous pouvez penser que l'utilisation des tableaux est la plus rapide car le tableau est la structure de données sous-jacente implémentée par la plupart des collections. Comment l'utilisation d'un groupe de nombres pur peut-elle inférieure à l'utilisation d'un objet de tableau?
Commençons par cette utilisation d'habitude commune qui semble familière:
Public String [] getNames () {return namesList.toArray (new String [namesList.size ()]);} Cette méthode crée des données à partir d'une collection de variables où ses données de préservation internes sont utilisées. est plus lent (veuillez consulter la barre verte vs orange dans le graphique):
public String [] getNames () {return namesList.toArray (new String [0]);} Cependant, si la méthode renvoie une liste, la création d'une copie défensive est plus rapide (barre rouge):
Public list <string> getNames () {return new ArrayList (namesList);} La différence est qu'une ArrayList a placé son élément de données dans un tableau d'objet [] et utilise un type de méthode TORAY, qui est beaucoup plus rapide que le type de méthode (Blue Bar). Aucun type de tableau, l'encapsulation est encapsulée dans le type générique du compilateur.
Cette icône montre une norme de référence pour n = 5 sur Java 7. Cependant, plus d'éléments de données ou un autre système de situation VM, cette image ne changera pas trop. Converti en collection afin de l'utiliser pour faire quoi que ce soit, puis convertissez le résultat en un tableau pour l'envoyer dans une autre méthode d'interface, et ainsi de suite.
Il utilise une liste simple au lieu d'un tableau pour améliorer les performances. octets.
À l'aide d'une collection, vous pouvez même décider de retourner une version non modifiée de la liste interne:
Public list <string> getNames () {return Collection.UnModifiBeBleList (namesList);}Cette opération se déroulera à un prix du marché fixe, il est donc beaucoup plus rapide que toute autre méthode (barre jaune). Un incapable de modifier le changement changera lorsque vos données internes changent. Si le changement se produit, le client s'exécute sur une conception concurrente en conception lorsqu'il est considéré comme une mauvaise conception. , Ce sera un choix haute performance, certains choses qui ne peuvent pas être implémentées par les tableaux.
Le tableau définit une structure, pas une interface
Java est une langue orientée objet. Le concept principal d'objet est de fournir des méthodes pour accéder et utiliser leurs données au lieu d'exploiter directement le domaine de données.
Étant donné que Java a conçu des performances, les tableaux natifs ont été intégrés dans le système de type. d'accès direct, vous n'avez pas d'autres choses à faire dans le tableau.
String [] array = {"foo", "bar"}; Println (array); "," Bar "}) // -> falseDifférent du tableau, l'API de collecte fournit de nombreuses méthodes utiles pour accéder aux éléments. et maintenir le principe de mise en œuvre en même temps.
En utilisant des données, vous définissez où les données sont préservées en mémoire.
Le tableau n'est pas un type sûr
Si vous comptez sur le type de vérification du compilateur, faites attention au tableau d'objets.
Numéro [] Nombres = Nouveau entier [10];
La raison en est que le tableau est "collaboratif". Couvrant toutes les théories et toutes les théories, chaque développeur Java doit lire.
En raison de ce comportement, l'interface du type de tableau exposé permet un sous-type d'une déclaration de type de tableau, ce qui provoque une anomalie d'exécution étrange.
Bloch a également expliqué que le tableau n'est pas compatible avec le type générique.
-Joshua Block, Effective Java (2e édition), article 29
Résumer
La structure linguistique de la couche inférieure du tableau et ils seront utilisés dans la mise en œuvre, mais ils ne devraient pas penser à une exposition aux autres classes. .