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.