150 votes

retourne un objet Void

Quelle est la manière correcte de renvoyer un Void lorsqu'il ne s'agit pas d'une primitive ? Par exemple, j'utilise actuellement null comme ci-dessous.

interface B<E>{ E method(); }

class A implements B<Void>{

    public Void method(){
        // do something
        return null;
    }
}

1 votes

J'écris un interpréteur pour un format de fichier, en utilisant le modèle d'interpréteur, mais certaines expressions n'ont pas de valeurs de retour.

4 votes

Il n'y a aucun moyen d'instancier le type Void, donc si vous devez vraiment retourner quelque chose de ce type, null est votre seule option. Cependant, vous n'avez probablement pas besoin de la valeur retournée pour quoi que ce soit, donc null devrait convenir.

0 votes

Oui, c'était ma logique aussi - je me demandais juste s'il y avait un moyen plus sémantique.

0voto

Christopher Oezbek Points 2691

Il n'existe pas de type générique qui indique au compilateur qu'une méthode ne renvoie rien.

Je crois que la convention est d'utiliser Object quand on hérite comme paramètre de type.

OU

Propager le paramètre de type vers le haut et ensuite laisser les utilisateurs de votre classe instancier en utilisant Object et assigner l'objet à une variable typée en utilisant un type-wildcard. ? :

interface B<E>{ E method(); }

class A<T> implements B<T>{

    public T method(){
        // do something
        return null;
    }
}

A<?> a = new A<Object>();

1 votes

Est-ce la convention pour définir le type de retour à void avec les génériques - cela ne me semble pas très void ?

0 votes

Je crois que c'est la voie à suivre. Tout utilisateur de la classe A<?> ne sera pas en mesure d'utiliser la valeur renvoyée par la fonction method() .

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