Perché l'interfaccia consente di avere il metodo main
in Java 8
?Perché l'interfaccia in Java-8 ha il permesso di avere il metodo principale?
Come indicato nel seguente codice, funziona correttamente e produce correttamente l'output.
public interface Temp {
public static void main(String args[]){
System.out.println("Hello");
}
}
USCITA (Dopo aver eseguito Temp.java)
Hello
Allora, qual è la differenza tra metodo principale di interface
e class
?
Attualmente si sta comportando come una classe e ho hanno eseguito interface
con metodo main.
Perché ne abbiamo bisogno?
EDIT
L'aggiunta di più alla domanda esistente, dal commento di seguito riportato (Di Brian Goetz)
avremmo dovuto esplicitamente annullato
main
metodi ora chestatic
metodi sono ammissibile ininterfaces
(o, equivalentemente, escludono'interface classes'
come obiettivi per il programma di avvio Java.)
Penso che tu abbia la domanda all'indietro. La domanda non è "dovrebbero essere consentiti i metodi principali", è "dovremmo avere esplicitamente disabilitato i metodi principali ora che i metodi statici sono permessi nelle interfacce" (o, equivalentemente, escludere le classi di interfaccia come target per il launcher java). Ciò avrebbe state aggiungendo * extra * regole solo per escludere qualcosa che alcune persone percepiscono come strano (ma non pericoloso) - e questo è un gioco perdente. Vuoi definire come poche nuove regole in base alle quali puoi ragionevolmente cavartela - perché altrimenti ti impantanare in complessità. –
@BrianGoetz Sì, sono d'accordo !! Sto cercando la stessa cosa che ho espresso con l'output e la mia preoccupazione è, perché abbiamo un'interfaccia che si comporta effettivamente come una classe e Java è in grado di eseguire il metodo principale di _interface_.Alla fine l'interfaccia è in realtà una classe e java non possono distinguere tra il principale dell'interfaccia e la classe. –
Le interfacce * sono * tipi di classe, e sono sempre state. Hanno alcuni valori predefiniti diversi (i metodi sono pubblici e astratti) e alcune restrizioni diverse. In Java 8 abbiamo rimosso alcune restrizioni, come la limitazione ai metodi statici. Non faremo una regola speciale per bandire un particolare metodo statico solo perché all'inizio sembra strano a poche persone. Quando comprendi veramente le nuove regole, questo non ti sembrerà strano, infatti la restrizione che proponi ti sembrerà strana. –