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
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Iphone 14 date de sortie - Guide
- Tableau croisé dynamique - Guide
- Afficher un tableau en c - Forum C
- Méthode java - Astuces et Solutions
1 réponse
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
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
public static <E> E[] customCloneArray(E[] source, int sourcePositionStart, int sourcePositionStop) {return Arrays.copyOfRange(source, sourcePositionStart, sourcePositionStop);
}
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