34 votes

Pourquoi les méthodes de la classe 'Arrays' sont-elles toutes statiques en Java?

J'ai été en passant par la documentation Java, et j'ai appris que les méthodes dans l' Arrays classe en Java sont statiques. Je ne comprends pas vraiment la raison pourquoi ils l'ont fait statique.

Par exemple, le code suivant viole l'approche OO, parce que si j'ai un type, 'X', toutes les méthodes qui agit sur les, il devrait être à l'intérieur:

int[] a = {34, 23, 12};
Arrays.sort(a);

Il serait mieux si ils ont mis en place la façon suivante:

int[] a = {34, 23, 12};
a.sort();

Quelqu'un peut-il m'expliquer un peu?

41voto

Peter Lawrey Points 229686

En Java, il n'existe aucun moyen d'étendre les fonctionnalités d'un tableau. Les tableaux héritent tous de Object , mais cela donne de très peu. À mon humble avis C'est une carence en Java.

Au lieu de cela, d'ajouter des fonctions pour les tableaux statiques les méthodes de l'utilitaire sont ajoutés à des classes comme l' Array et Arrays. Ces méthodes sont static qu'ils ne sont pas des méthodes d'instance.

18voto

Asaph Points 56989

Bonne observation. Observer également que chaque tableau peut être trié. Uniquement les tableaux de primitives et les Objets qui implémentent l' Comparable interface peut être triée. De manière générale sort() méthode qui s'applique à tous les tableaux n'est pas possible. Et si nous avons plusieurs surcharge des méthodes statiques pour chacun des types pris en charge, qui sont en fait sortable.

Mise à jour:

@Holger correctement points dans les commentaires ci-dessous que celui de la surcharge des méthodes statiques est en effet Arrays.sort(Object[]) mais les docs sont explicites:

Tous les éléments du tableau doivent mettre en œuvre l' Comparable interface.

Si cela ne fonctionne pas pour les Objets qui ne sont pas mise en œuvre d' Comparable ou un de ses sous-interfaces.

13voto

Dariusz Points 8058

Tout d'abord, Arrays est une classe utilitaire qui fait exactement cela: expose des méthodes statiques. Il est séparé de tout arr[] cas et n'a pas OO rapport à elle. Il existe plusieurs classes comme ça, comme Collections ou divers StringUtils.

Les tableaux sont des collections, ils sont utilisés pour stocker des données. Arrays.sort() est un algorithme qui trie la collection. Il peut y avoir de nombreux autres algorithmes de tri des données d'une manière différente, tous d'entre eux seront utilisés de la même façon: MyAlgorithm.doSthWithArray(array). Même si il y avait un sort() méthode sur un tableau (il aurait alors à être un SortableArray, parce que pas tous les Objets peuvent être triés automatiquement), tous les autres algorithmes aurait pu être appelé le vieux chemin de toute façon. Sauf s'il y a un modèle visiteur introduit... Mais qui rend les choses trop compliquées, par conséquent, il n'y a pas de point.

Pour une Collection java il y a Collections.sort(), même en C++ il y a std::sort qui fonctionne de la même façon que n' qsort dans C . Je ne vois pas le problème ici, je vois la cohérence.

3voto

Shatayu Darbhe Points 167

Les Méthodes statiques sont parfois utilisés pour des fins particulières. Afin de Tableaux est classe utilitaire pour usage général les opérations de matrice. De même, des Collections est aussi Util classe où l'utilité de méthodes sont données.

2voto

QuestionC Points 1490

Les tableaux sont un peu comme la deuxième classe de médicaments génériques. Lorsque vous faites un tableau, il fait une classe personnalisée pour le type de tableau, mais il n'est pas complet parce qu'ils ont décidé de l'utilisation des tableaux de travail avant de vraiment étoffé la langue.

Cela, combiné avec le maintien de la rétro-compatibilité, signifie que les Tableaux sont coincés avec un archaïque de l'interface.

C'est juste une partie de l'API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X