Bien désolé pour l'implémentation moisie précédente pas bien vérifiée :( Et peut-être pour mon insistance/lourdeur.
Mais j'aime bien les retours, et t'y vas assez cordialement :) (même si tu prends pas des pincettes, mais moi non plus...)
importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;importjava.util.Iterator;importjava.util.LinkedList;importjava.util.List;publicclassClassA{// here, you just say what types are acceptedprivateclassClassB<IextendsInteger,SextendsString>implementsIterable{// it's a bit more wrapping, but for the funprivateCollectionc;publicClassB(Collectionc){// we could do better, just a bit of safety hereif(!c.isEmpty())c.clear();this.c=c;}privatevoidadd(Object...params)throwsException{this.c.addAll(checkIn(params));}privateCollection<Object>checkIn(Object...params)throwsException{// here we can do a bunch of checks. Choose your own. It's just the entry gateif(params.length==0)thrownewException("You shall not pass!");returnArrays.asList(params);}// do type checking herepublic<TextendsI>voidaddBidules(T...t)throwsException{this.add(t);}public<TextendsS>voidaddBidules(T...t)throwsException{this.add(t);}privateintgetNumerOfBidules(Classc){intr=0;for(Objecto:this.c){if(c.isInstance(o))r++;}returnr;}publicCollection<Object>filter(Classc){List<Object>r=newArrayList<Object>();for(Objecto:this.c){if(c.isInstance(o))r.add(o);}returnr;}publicIteratoriterator(){returnc.iterator();}}publicstaticvoidmain(String[]args)throwsException{ClassAa=newClassA();a.doThings();}publicvoiddoThings()throwsException{ClassB<Integer,String>maListeDeBidules=newClassB<>(newLinkedList());maListeDeBidules.addBidules(1);// okmaListeDeBidules.addBidules("deux");// okmaListeDeBidules.addBidules(3,4,5,6,7,8);// okmaListeDeBidules.addBidules("neuf","dix","onze","douze","treize","quatorze");// okinti=0;for(Objecto:maListeDeBidules){System.out.println("mon bidule "+(i+1)+" : "+o);i++;}System.out.println("La moyenne dans ma liste de bidules est de : "+this.getMean(maListeDeBidules));// here we go!ClassB<Integer,String>maListeDeBidules2=newClassB<>(newArrayList());for(i=0;i<10000000;i++)maListeDeBidules2.addBidules(i);}publicdoublegetMean(ClassB<Integer,String>b)throwsException{Class<Number>c=Number.class;intn=b.getNumerOfBidules(c);if(n==0)thrownewException("Maybe you want numbers...");doublemean=0;for(Objectv:b.filter(c)){mean+=((Number)v).doubleValue()/n;}returnmean;}}
Donc voilà, que pense-tu de cette solution ?
Il y a probablement plein de trucs à faire pour rendre ça exploitable (les throws Exception et plein d'autres trucs sûrement).
[^] # Re: Typage
Posté par _kaos_ . En réponse au message débutant java : opérations de base sur les listes. Évalué à 2.
Re-salut,
Bien désolé pour l'implémentation moisie précédente pas bien vérifiée :( Et peut-être pour mon insistance/lourdeur.
Mais j'aime bien les retours, et t'y vas assez cordialement :) (même si tu prends pas des pincettes, mais moi non plus...)
Donc voilà, que pense-tu de cette solution ?
Il y a probablement plein de trucs à faire pour rendre ça exploitable (les
throws Exceptionet plein d'autres trucs sûrement).Matricule 23415