it-swarm.it

Cosa vuol fare in java?

Il tipo restituito: il tipo di dati del valore restituito dal metodo o nulla se il metodo non restituisce un valore.

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

Ok, allora .. Ecco la mia domanda:

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

Il codice sopra non funziona senza nulla.

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

Cosa mi sono perso? Perché c'è un vuoto lì? E restituisce una stringa?

8
Alice

Il motivo per cui il codice non funziona senza void è perché il metodo System.out.println(String string) non restituisce nulla e stampa solo gli argomenti forniti al terminale standard out, che è il monitor del computer nella maggior parte dei casi. Quando un metodo restituisce "nulla", devi specificarlo inserendo la parola chiave void nella sua firma.

Puoi vedere la documentazione di System.out.println qui:

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

Per aumentare ulteriormente il problema, println è un classico esempio di un metodo che sta eseguendo il calcolo come un "effetto collaterale". 

9
Dhruv

Intendi il metodo tellItLikeItIs? Sì, devi specificare void per specificare che il metodo no restituisce nulla. Tutti i metodi have hanno un tipo di ritorno specificato, anche se void.

Certamente non restituisce una stringa - guarda, non ci sono dichiarazioni di ritorno da nessuna parte. Non è molto chiaro il motivo per cui pensi che sia restituisca una stringa. È stampa stringhe alla console, ma non è la stessa cosa che restituire uno dal metodo.

14
Jon Skeet

Void: il modificatore di tipo void afferma che il metodo main non restituisce alcun valore. Tutti i parametri di un metodo sono dichiarati all'interno di un precedente di parentesi. Qui String args [] dichiara un parametro denominato args che contiene una matrice di oggetti della stringa del tipo di classe.

0
KABEZA J.paul

Il vuoto non restituisce nulla; dice al compilatore che il metodo non ha un valore di ritorno.

0
Dave Newton

void significa che non restituisce nulla. Non restituisce una stringa, scrivi una stringa su System.out ma non ne stai restituendo una.

Devi specificare cosa restituisce un metodo, anche se stai solo dicendo che non restituisce nulla. 

Tecnicamente parlando potrebbero aver progettato il linguaggio in modo tale che se non si scrive un tipo restituito, si presume che non restituisca nulla, tuttavia farti scrivere esplicitamente void aiuta a garantire che la mancanza di un valore restituito sia intenzionale e non accidentale.

0
Davy8

Quando il tipo di reso è nullo, il tuo metodo non restituisce nulla. 

Guarda ancora il tuo codice: non c'è ritorno in quel metodo. Si stampa sulla console e si esce.

0
duffymo