54 votes

Renvoyer plusieurs valeurs à partir d'une méthode Java : pourquoi pas d'objets n-tuple ?

Pourquoi n'existe-t-il pas une solution (standard, certifiée par Java), faisant partie du langage Java lui-même, pour renvoyer plusieurs valeurs à partir d'une méthode Java, au lieu que les développeurs doivent utiliser leurs propres moyens, comme les cartes, les listes, les paires, etc. Pourquoi Java ne prend-il pas en charge les objets n-tuple ?

On pense en particulier aux méthodes privées triviales qui peuvent modifier deux objets ensemble (en tandem), et dans ce cas un objet typé comme retour semble exagéré.

2voto

Paul Hamilton Points 79

Il existe un nouveau style de modèle, qui s'inscrit dans le cadre de la nature "tout asynchrone" que l'on peut observer dans des langages tels que JavaScript.

Une grande partie de mon code ressemble à cela aujourd'hui :-)

public class Class1 {

    public interface Callback {
       void setData(String item1, String item2);
    }
    public void getThing(Callback callback) {
        callback.setData("a", "b");
    }
}

public class Class2 {

    public void doWithThing(Class1 o) {
        o.getThing(new Class1.Callback() {
            public void setData(String item1, String item2) {
                ... do something with item 1 and item 2 ...
            }
        });
    }

}

Pas de nouveaux objets à créer et pas beaucoup de classes supplémentaires puisque l'interface est une classe interne de l'objet.

C'est ce qui rend Swift si génial. Le code peut ressembler à ça :

o.getThing({ item1, item2 -> Void in
    ... do something with item 1 and item 2 ...
});

Et comme le seul argument est le bloc, même ça :

o.getThing { item1, item2 -> Void in
    ... do something with item 1 and item 2 ...
};

Java a besoin d'un travail pour rendre le code chargé de callbacks beaucoup plus facile à lire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X