Je voudrais Y a-t-il une bibliothèque Java qui peut gérer cela? P>
GUAVA semble gérer un seul niveau de nidification, c'est-à-dire lambdaj semble prometteur: puis-je en quelque sorte combiner
collection < Collection
Collection
sur () code >,
astératorator () code> et
flatteniterator () code> pour y parvenir? De manière statiquement sûre de type? P>
3 Réponses :
Je pense que cela peut aider: arrais.deeptostring (mycollection.toarray ()) code> p>
Pour récupérer des chaînes, oui. Pour récupérer des éléments de type T, cela n'aide malheureusement pas.
@Daveball Je pense que cela fonctionnerait toujours, vous voulez vérifier le code pour deeptostring et dépend également de savoir si le type T a mis en œuvre Tostring
deeptostring () code> ne gère pas les tableaux non plus. C'est-à-dire que si l'un des éléments est un tableau code> code>, il appellera
tostring code> dessus, pas
arrayes.deeptostring code>. Etrange mais vrai.
@Daveball Je pense que suraj signifie getdeclaredmethods () code> qui vous dira si le
class code> implémente
tostring () code> lui-même. Mais je ne sais pas comment cela aide. Vous n'êtes pas intéressé à savoir quelle est la représentation de la chaîne de l'objet, vous voulez un itérateur sur tous les objets.
non basé sur l'un ou l'autre des éléments ci-dessus, mais peut-être une classe Deeteriterator construite avec une collection dont la méthode suivante regarde l'objet suivant et s'il s'agit d'une instance de collection, pousse l'itérateur actuel sur la pile et recute dans ce Itérateur de la collection. p>
J'ai une daja-Vu lisant votre message;) Mais c'est une bonne idée de le donner comme une vraie réponse - Voyons ses votes ...
@Daveball Si je peux être évité pour une réponse correcte, je peux peut-être avoir suscité une réponse partielle :)
Guava supportera probablement ce finalement em>: p>
http://code.google.com/p/ Guava-bibliothèques / problèmes / détails? id = 174 p>
(il pourrait être plus facile de le lire de bas en haut, puisque la réflexion sur elle a déplacé quelques fois au cours de sa vie.) P>
Non basé sur l'un ou l'autre des éléments ci-dessus, mais peut-être une classe
approfondeur construite avec une collection code> code> dont
suivez () code> méthode regarde le suivant < Code> Object Code> et s'il s'agit d'une instance
de collection code> enfonce le courant
itérateur code> sur
pile code> et recoque dans la collection
code> Itérateur.
Oui, j'ai mis en œuvre des itérateurs de cette façon. Devoir faire une distinction de cas pour les tableaux de dimensions arbitraires et d'itérateurs est plutôt fidèle, cependant. Et il n'y a pas de type de type statique :( puisque Lambdaj met probablement en œuvre au moins aussi bien, je ne pense pas que je devais faire cette mise en œuvre ...
Que voulez-vous dire que vous voulez dire la sécurité statique ici? Étant donné que la collection (ADG en fait) peut contenir des éléments de différents types, l'itérateur ne peut fournir que
objet code> s. Est-ce que je manque quelque chose?
Au moins pour toutes les collections arbitraires profondément imbriquées, vous pouvez détecter à la compilation de la compilation que les feuilles sont toutes de type T. Étant donné que Lambdaj offre de nombreuses fonctions qui se sentent typées de manière dynamique (par exemple, invoquer une méthode sur chaque article), mais sont encore statistiques dactylographiés. J'espère que Lambdaj peut gérer encore plus de structures et de chèques au moment de la compilation.
Deepiterator Code> L'approche semble prometteur, mais je ne pense pas que vous puissiez obtenir une solution de sécurité générale et statique. Je ne vois pas comment vous pouvez même exprimer une telle entité en Java.
La collection et chaque élément est un seul élément ou une interface d'implémentation d'objet proxy Lambdaj.
Ou faire un type de données de l'Union disjoint avec FJ.DATA.ELS de Java fonctionnel. Donc, dans l'ensemble, ce n'est certainement pas facile, mais la typage statique peut souvent faire plus, alors vous attendez à première vue (même sans types dépendants de débit ou de type).
Concernant
Collection Que se passerait-il si un élément imbriqué n'est pas une sorte d'interface
code>? Omettez ces éléments? Lancer une exception?
Comme je l'ai dit, je suis intéressé par la sécurité de type statique, le compilateur me donnerait une erreur (l'interface de mise en œuvre de l'objet proxy de Lambdaj est censée être de type statistique).