Générer un type de tableau variable en sortie de méthode
Résolu/Fermé
neocol
Messages postés
63
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
6 février 2016
-
Modifié par neocol le 26/10/2015 à 22:35
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 - 27 oct. 2015 à 00:01
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 - 27 oct. 2015 à 00:01
A voir également:
- Générer un type de tableau variable en sortie de méthode
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Generer mot de passe - Télécharger - Sécurité
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
1 réponse
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
26 oct. 2015 à 23:30
26 oct. 2015 à 23:30
Bonjour,
Pour faire ce que tu veux il te manque la généricité, c'est à dire qu'au lieu de renvoyer Object[] il faudrait que tu renvoies un E[] où E est le même type que le tableau E[] de la source : on précise ce paramètre avec <E>
Remarque : écrite comme ça, cette méthode ne sert à rien, autant appeler directement Arrays.copyOfRange.
Plus dur : si tu voulais écrire toi même la méthode Arrays.copyOfRange, il te faudrait alors créer un nouveau tableau E[], malheureusement il est impossible de faire un new E[n] quand E est un type générique.
Pour résoudre ce problème il faut passer par le package java.lang.reflect.*
NB. À ce moment là le tableau est vide, il faut encore le remplir avec les bonnes valeurs au bon endroit.
Pour faire ce que tu veux il te manque la généricité, c'est à dire qu'au lieu de renvoyer Object[] il faudrait que tu renvoies un E[] où E est le même type que le tableau E[] de la source : on précise ce paramètre avec <E>
public static <E> E[] customCloneArray(E[] source, int sourcePositionStart, int sourcePositionStop) { return Arrays.copyOfRange(source, sourcePositionStart, sourcePositionStop); }
Remarque : écrite comme ça, cette méthode ne sert à rien, autant appeler directement Arrays.copyOfRange.
Plus dur : si tu voulais écrire toi même la méthode Arrays.copyOfRange, il te faudrait alors créer un nouveau tableau E[], malheureusement il est impossible de faire un new E[n] quand E est un type générique.
Pour résoudre ce problème il faut passer par le package java.lang.reflect.*
@SuppressWarnings("unchecked") E[] ouput = (E[]) Array.newInstance(source.getClass().getComponentType(), size);
NB. À ce moment là le tableau est vide, il faut encore le remplir avec les bonnes valeurs au bon endroit.
Modifié par neocol le 26/10/2015 à 23:50
ne marche pas pour int[] newArray = customCloneArray(oldArray, integer, integer)
26 oct. 2015 à 23:55
C'est d'ailleurs pour ça que toutes les méthodes de Arrays sont dupliquées une méthode pour les objets E (ou T, ou ce que l'on veut) et huit méthodes pour chacun des huit types primitifs. C'est moche mais il n'y a pas le choix.
27 oct. 2015 à 00:01
Merci KX