2016-07-07 10 views
5

Więc chciałem przetestować Void typ wtedy napisałem ten prosty program:Dlaczego nie można używać pustkę jako typ wartości zwracanej przez metodę głównej

package ehsan; 

public class NumTest { 
    public static Void main(String[] args) { 
     System.out.println("Hello, World!"); 
     return null; /* The compiler forced me to do so. I just can't realize what is the point in returning in Void type!? */ 
    } 
} 

Więc teraz, gdy chcę skompilować, kompilator narzeka:

Dlaczego kompilator nie widzi, że nic nie zwracam i używam Void?

+5

'Void' i' void' to nie to samo. – Eran

+3

Ponieważ standard definiuje sygnaturę głównej metody jako 'public static void main (String ... args)'. Autoboxing/unboxing nie ma nic wspólnego z sygnaturami metod. Nie można automatycznie podpisać podpisu. – tkausl

+3

Void nie jest opakowaniem dla pustki – Eran

Odpowiedz

4

Powinieneś użyć obiektu void (małe litery v) a nie Void. Void Obiekt nie będzie mieć statusu autoboxing, np. int/Integer, patrz Java Language Specification dla listy obiektów autoboxing.

Void nie jest opakowaniem dla void, to tylko obiekt, który ma bardzo podobną nazwę, więc może być stosowany w miejscach, gdzie trzeba określić typ zwracanej (jak np Callable<T>), to tylko dla celów dokumentacji i do obejścia niektórych typów zwrotów klas ogólnych.

Drugi przypadek użycia jest w odbiciu (jeśli chcesz sprawdzić wartość zwracaną funkcji void, otrzymasz Void.TYPE).

Poprawna linia:

+0

Więc jedynym zastosowaniem 'Void' jest określenie typów ogólnych? (Przepraszam za moje nowatorskie pytania :) –

+0

Zwykle istnieją inne przypadki użycia związane z refleksją, jak to jest napisane w 'Void' docs: * Klasa Void jest nieodpowiednią klasą zastępczą, która ma zawierać odniesienie do obiektu Class reprezentującego Słowo kluczowe Java nieważne.* –

2

Void jest typem klasy, więc kompilator spodziewa się zwrócić wartość dla niego. Powinieneś używać void z małą literą.

Przyczyną tego błędu:

main method must return a value of type void

Wynika to z zasady, że metoda main powinny zawsze powrócić void - co jest kluczowe nie java typu klasy.

1

Typo error.

Jest void nie Void

jest zdarzało się, że Joe jest klasa w Javie. Od Dokumentów

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

+0

Żaden człowiek nie ma błędu literówki, właśnie testuję 'Void' :) –

+0

Moje zaćmienie mówi Ta metoda musi zwrócić wynik typu Void –

+0

Zwróć uwagę, że' void' różni się od 'Void' .... –

Powiązane problemy