alahassarodriguez
Messages postés19Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention12 avril 2008
-
12 avril 2008 à 00:32
alahassarodriguez
Messages postés19Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention12 avril 2008
-
12 avril 2008 à 15:55
Bonjour,
Pourrait on implémenter une fonction(une seule sans surcharge de fonctions) en java qui puisse recevoir un tableau en paramètres et renvoyer true dans le cas toutes les valeurs du tableau sont identiques, et renvoyer false dans l'autre cas.
Nb: quelque soit le type de variables, et ce en java
slashrod
Call it a Clan, call it a Network, call it a Tribe, call it a Family. Whatever you call it, whoever you are, you need one
(Jane Howard)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 12 avril 2008 à 14:45
Salut,
coucou : en effet, les types primitifs ne peuvent pas (à ma connaissance) être utilisés dans les generics, mais rien n'empêche d'utiliser la classe rattachée (plus lent, certes, mais ca passe).
[auteur/ALAHASSARODRIGUEZ/1026389.aspx alahassarodriguez]: Concernant le equals, c'est une bonne pratique de le redéfinir dès qu'on fait un bean (ainsi que le hashCode). Eclipse permet de générer automatiquement ces fonctions, je pense que netbeans aussi. Ces fonctions sont plus qu'utile, car sans cà, java ne peux pas comparer 2 instances de classes différentes correctement ni les placer dans une table de hachage de façon optimisé !
______________________________________
DarK Sidious
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 12 avril 2008 à 01:35
bonjour
ca fait partie des problemes du java
tu peux faire une fonction qui traite un object[], et utilise la methode equals, mais t'as aucun moyen de traiter un int[] ou un char[] aussi bien qu'un string[] sans faire differentes fonctions.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 12 avril 2008 à 06:03
Salut,
Ce n'est pas tout à fait vrai coucou : il est possible de faire une classe générics avec un tyep T, puis faire une fonction qui prend en paramètre un tableau de type T.
Ou encore, faire une fonction qui prend un ArrayList, plutôt qu'un tableau de type, et ainsi pouvoir traîter n'importe quel type d'objets (c'est objets devant redéfinir le equals, je le rappelle !).
______________________________________
DarK Sidious
alahassarodriguez
Messages postés19Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention12 avril 2008 12 avril 2008 à 09:27
Je suis arrivé à créer ma classe qui gère les types génériques.
Seul problème encore, je n'arrive pas encore à implémenter ma fonction qui recevra un tableau de n'importe quel type(notament int).
Voici l'erreur que j'ai:
The method IsIdentique(ArrayList) in the type Test.Identique is not applicable for the arguments (int[])
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 12 avril 2008 à 12:26
Darksidious
public class Main {
public static void main(String[] args) {
java.util.ArrayList a;
}
}
ceci compile parfaitement bien, tandis que :
public class Main {
public static void main(String[] args) {
java.util.ArrayList a;
}
}
ceci ne compile pas...
/home/....Main.java:31: unexpected type
found : int
required: reference
java.util.ArrayList a;
pensant que le probleme vennait de la class ArrayList (mais en Cpp, il me l'aurait dit directement..) j'ai teste avec :
public class Main<E> {
public static void main(String[] args) {
Main a;
}
}
force est de constater qu'on ne peut toujours pas y passer de type de base... et pour des constantes, on est pas pret d'y arriver...
La raison ? En Cpp, les templates portent leurs noms, ce sont des modeles appliques a la compilation de fait, si on compile map<string, int> et map<string, string>, on aura deux classes de compilees, pourtant on a qu'une template map. En java, les generiques portent leurs noms aussi, ce sont des classes qui peuvent prendre n'importe quel _objet_, elles ne sont compiles qu'une fois, le compilateur se contente de verifier le typage (d'ailleur on est meme pas oblige de specifier le type...), et ensuite, il compile ca comme un Object... Ce qui explique que :
public class Main<E> {
alahassarodriguez
Messages postés19Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention12 avril 2008 12 avril 2008 à 13:13
Sur ce coup là, tu ne te trompes pas.
Si j'ai bien compris vos réponses précédentes,
1- devrais je conclure que l'on ne peut avoir le résultat escompté avec les types primitifs?
2- Faudrait il encore redéfinir toutes les méthodes "equals" de tous les types d'objets pour lesquels la fonction devra être utilisée?
3- C'est à dire un énorme travail de programmation?
Un autre problème que je viens de remarquer est que la fonction que j'ai écrite ne récupère que le type des variables dans le ArrayList et donc s'attend à recevoir un String par exemple alors qu'on lui a passé un tableau de String en paramètre. Ce qui génère également des erreurs de compilation.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 12 avril 2008 à 13:20
en regle generale, les types qu'on utilise classiquement ont deja la methode equals (String, Integer, Color, etc...)
comme je le disais dans mes deux precedents messages, avec les types primitifs, tu l'as dans le ... (c'est uniquement ce que je disais... donc je ne vois pas ou je me suis trompe...)