web-dev-qa-db-fra.com

Que fait le vide en Java?

Le type de retour - le type de données de la valeur renvoyée par la méthode ou void si la méthode ne renvoie pas de valeur.

http://download.Oracle.com/javase/tutorial/Java/javaOO/methods.html

Ok, alors .. Voici ma question:

public class EnumTest {
    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY: System.out.println("Mondays are bad.");
                         break;

            case FRIDAY: System.out.println("Fridays are better.");
                         break;

            case SATURDAY:
            case SUNDAY: System.out.println("Weekends are best.");
                         break;

            default:     System.out.println("Midweek days are so-so.");
                         break;
        }
    }

    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();


    }
}

http://download.Oracle.com/javase/tutorial/Java/javaOO/enum.html

Le code ci-dessus ne fonctionne pas sans vide.

Exception in thread "main" Java.lang.Error: Unresolved compilation problems: 
    The method tellItLikeItIs() is undefined for the type EnumTest

Qu'est-ce qui m'a échappé? Pourquoi y a-t-il un vide là-dedans?

8
Alice

La raison pour laquelle le code ne fonctionnera pas sans void est que la méthode System.out.println(String string) ne renvoie rien et affiche uniquement les arguments fournis sur le terminal de sortie standard, qui est le moniteur de l'ordinateur dans la plupart des cas. Quand une méthode ne retourne "rien", vous devez spécifier cela en mettant le mot clé void dans sa signature.

Vous pouvez voir la documentation de System.out.println ici:

http://download.Oracle.com/javase/6/docs/api/Java/io/PrintStream.html#println%28Java.lang.String%29

Pour approfondir la question, println est un exemple classique de méthode qui effectue un calcul en tant qu '"effet secondaire". 

9
Dhruv

Vous voulez dire la méthode tellItLikeItIs? Oui, vous devez spécifier void pour indiquer que la méthode ne renvoie rien . Toutes les méthodes doivent avoir un type de retour spécifié, même si c'est void.

Cela ne retourne certainement pas de chaîne - regardez, il n'y a pas d'instructions de retour nulle part. Ce n'est pas vraiment clair pourquoi vous pensez que renvoie une chaîne. C'est imprimer des chaînes sur la console, mais ce n'est pas la même chose que renvoyer une chaîne depuis la méthode.

14
Jon Skeet

Void: le modificateur de type void indique que la méthode principale ne renvoie aucune valeur. Tous les paramètres d'une méthode sont déclarés dans un prior de parenthèses. String args [] déclare un paramètre nommé args contenant un tableau d'objets de la chaîne de type classe.

0
KABEZA J.paul

Le vide ne retourne rien; il indique au compilateur que la méthode n'a pas de valeur de retour.

0
Dave Newton

void signifie qu'il ne retourne rien. Il ne renvoie pas de chaîne, vous écrivez une chaîne dans System.out mais vous n'en renvoyez pas.

Vous devez spécifier ce qu'une méthode retourne, même si vous dites simplement qu'elle ne retourne rien. 

Techniquement, ils auraient pu concevoir le langage de sorte que si vous n'écrivez pas un type de retour, il est supposé ne rien renvoyer. Cependant, vous écrivez explicitement void permet de garantir que l'absence de valeur renvoyée est intentionnelle et non accidentelle.

0
Davy8

Lorsque le type de retour est nul, votre méthode ne renvoie rien. 

Regardez à nouveau votre code: il n'y a pas de retour dans cette méthode. Vous imprimez sur la console et quittez.

0
duffymo