Java >> Java opplæring >  >> Java

getDeclaredMethods() oppfører seg annerledes i Java 7 vs. Java 8

getDeclaredMethods() oppfører seg riktig her da den forteller deg nøyaktig hva den har funnet i klassen. Hvis du mater inn en interface kompilert med Java 7-mål (eller en eldre kompilator) vil du ikke se noen forskjell til utdataene fra Java 7-implementeringen av getDeclaredMethods() .

Det er kompilatoren som oppfører seg annerledes. Ved kompilering av en slik sub-interface i Java 8 vil det genereres en brometode som ikke vil bli generert for et Java 7-mål, da det ikke engang er mulig for Java 7-målet.

Grunnen til at brometoder genereres for grensesnitt nå er at du vanligvis har flere implementeringsklasser enn grensesnitt, og derfor har en default brometoden i grensesnittet sparer deg fra å legge til brometoden i hver implementering. Videre gjør det generering av lambda-klasse mye enklere hvis det bare er én abstract metode og ingen brometode å implementere.

Når en interface hierarki krever brometoder, men gir ingen default s, må kompilatoren generere kode ved å bruke LambdaMetafactory.altMetafactory i stedet for LambdaMetafactory.metafactory spesifisere hver brometode som kreves.


Java Tag