• [^] # Re: Typage

    Posté par (site web personnel) . En réponse au message débutant java : opérations de base sur les listes. Évalué à 6.

    Alors, "concis", c'est pas la bonne métrique. Si t'as envie de jouer au golfe, tant mieux. Mais je n'ai aucune envie de maintenir du code qui préfère la concision (et les potentiels bugs à l'execution) simplement car c'est concis. Tu veux un containeur qui contient tes objets spécifiques, et rien d'autre, mais qui soit extensible sans aucun changement.

    import java.util.ArrayList;
    import java.util.List;
    class ListeExtensible {
     interface MyStuff { 
     public void print();
     }
     class MyInt implements MyStuff {
     final int i;
     public MyInt(int i) {
     this.i = i;
     }
     public void print() {
     System.out.println(this.i);
     }
     }
     class MyString implements MyStuff {
     final String s;
     public MyString(String s) {
     this.s = s;
     }
     public void print() {
     System.out.println(this.s);
     }
     }
     public void doStuff() {
     List<MyStuff> maListe = new ArrayList<>();
     maListe.add(new MyInt(1));
     maListe.add(new MyString("hello"));
     for (MyStuff element : maListe) {
     element.print();
     }
     }
     public static void main(String[] args) {
     ListeExtensible l = new ListeExtensible();
     l.doStuff();
     }
    }

    Pas besoin de casts (vu qu'on ne retourne jamais "Object"), on ne peut pas avoir d'erreur à l'exécution, et on peut ajouter autant de nouveau sous-types qu'on veut sans qu'on doive modifier aucun code existant. C'est, je crois, la manière de s'y prendre en Java. Alors, oui, c'est plus compliqué que Python, mais c'est ainsi. Language différent, paradigme différent.