Ho scoperto che in Eclipse (utilizzando il compilatore Eclipse) posso utilizzare alcune funzionalità del linguaggio Java 7, ma comunque creare file di classe Java 6. Nell'immagine sottostante, è possibile visualizzare due funzionalità del linguaggio Java 7 che vengono compilate correttamente come file di classe Java 6. Tuttavia, altre funzionalità di Java 7, quelle commentate, non vengono compilate.Perché Eclipse mi consente di compilare alcune funzionalità del linguaggio Java 7 in file di classe Java 6?
La mia ipotesi è che Eclipse stia determinando quali funzionalità del linguaggio Java 7 sono compatibili con Java 6 JVM e quali no. Ad esempio, il tipo generico JComboBox è solo una funzionalità di compilazione (e non di runtime), quindi posso immaginare come sarebbe compatibile. La funzione di interruttore String se penserei potrebbe fare differenze nel codice di byte e contare su nuove funzionalità di JVM, ma potrei sbagliarmi ...
Le mie domande:
è Eclipse davvero abbastanza intelligente da sapere quali funzionalità di Java 7 linguaggio sono in grado di essere compilate in file di classe Java 6 e quali no?
L'esempio seguente chiaramente non è compatibile con la sorgente di 1,6, quindi perché l'impostazione di "Compatibilità origine" su 1,6 non causa un errore?
Questo "trucco" sembra consentirmi di utilizzare almeno alcune funzionalità del linguaggio Java 7 e di creare ancora file di classe Java 6. L'utilizzo di javac con source 1.7 e target 1.6 fallirebbe, quindi perché funziona? Il compilatore Ecilpse ha una caratteristica che javac non possiede?
Per motivi di confronto qui è il risultato quando passo a un Java 6 compilatore, come previsto.