@FunctionalInterface
è probabilmente per riflessione di runtime, controllo di compilazione e processo di runtime Java.
javap viene utilizzato per decompilare e confrontare due interfacce, una con @FunctionalInterface
, l'altra nessuna.
soli altri due righe BYTE Codice in @FunctionalInterface
interfaccia etichettato:
Constant pool:
#7 = ... RuntimeVisibleAnnotations
#8 = ... Ljava/lang/FunctionalInterface;
Ed entrambi implementazione/lambda espresso sono gli stessi a livello di byte di codice.
Fatta eccezione per l'interfaccia riflessione:
X.class.getAnnotation(FunctionalInterface.class) == null?;
fonte
2014-11-25 09:39:14
Vuol ogni interfaccia @Documented hanno la massima RetentionPolicy (runtime)? – auntyellow
Forse ha la risposta (http://stackoverflow.com/questions/20775614) – auntyellow
@auntyellow: Non è un requisito difficile, tuttavia, lo scopo di rendere le informazioni ampiamente disponibili porta alla conclusione che di solito si desidera * la massima conservazione . Tra l'altro, 'RetentionPolicy.CLASS' non offre alcun vantaggio rispetto a' RUNTIME'. Consuma la stessa quantità di spazio all'interno di un file di classe e poiché Reflection carica le annotazioni solo su richiesta, non vi è alcun vantaggio nel non essere disponibile all'interno del runtime. – Holger