Bonjour,
Bien qu'ayant lû de la doc sur les Générics et ayant constaté des manques par rapport aux templates C++, je me demande si il était tout de même possible d'avoir un équivalent aux traits C++ ?
quelqu'un aurait-il une idée ?
Merci
Bonjour,
Bien qu'ayant lû de la doc sur les Générics et ayant constaté des manques par rapport aux templates C++, je me demande si il était tout de même possible d'avoir un équivalent aux traits C++ ?
quelqu'un aurait-il une idée ?
Merci
Les traits servent principalement à définir une caractérisation sur un type et ce de façon statique. Ceci est rendu possible par la surcharge de template pour les différents type qu'ils adressent. C'est en gros de la définition de fonction au méta-niveau
Imagine par exemple, que tu veuilles définir la caractéristique de taille mémoire utilisée pour des types. Tu vas définir un template qui retourne 2 pour un appel size_traits<short>::size, et 4 pour un appel size_traits<int>.
là ca parraît obscur comme façon de faire, mais c'est rendu nécessaire si tu travaille dans le méta niveau. Si tu as un template qui accepte un type T dont tu veux connaitre la propriété de taille, tu peux appliquer le traits size_traits<T> dessus, donc introspecter sur un type anonyme.
En java, ca n'existe tout simplement pas. Il faut passer par des class<T>...
Je n'ai pas tout compris à tes traits... mais l'introspection d'une classe existe en java (par contre, je ne suis pas certain que celle-ci fonctionne sur une classe anonyme): si tu veux en savoir d'avantage sur l'introspection en java, regarde le package "java.lang.reflect"
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
Bonjour,
Si j'ai bien compris l'exemple fourni, il me semble que c'est le fonctionnement des interfaces :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface SizeTraits { public int size(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class ShortSizeTraits implement SizeTraits { public int size() { return 2; } }Et l'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class IntSizeTraits implement SizeTraits { public int size() { return 4; } }
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void test(SizeTraits st) { System.out.println(st.size()); }
ton code sera utile au run-time, mais dans mon cas, cela ne m'intéresse pas, car il me faut un élément utile au compile-time.
Les generics Java n'ont pas la même approche qu'en C++, et ça m'ennuie, car j'aurais bien voulu appliquer les "traits" c++ en Java.
Partager