Perché a runtime c'è qualcuno interessato a sapere che un metodo è deprecato? Alcuni possono fornirmi alcuni esempi?Perché RetentionPolicy per @deprecated è RUNTIME?
risposta
Si presume che @deprecated sia di interesse solo nella fase di compilazione (IDE, compilatore), ma non è un intervallo per gli scenari di strumentazione di imaging in cui si richiedono tali informazioni.
Ad esempio, un IDE può informarti del numero di siti di chiamata per un metodo deprecato, ma come andresti a determinare la percentuale di tempo che l'applicazione spende in metodi deprecati?
Immagina di compilare MyClass.class con metodi obsoleti. Se le tue annotazioni @Deprecated sono andate perse, l'IDE o il compilatore non potrebbero avvisarti quando chiami quei metodi da un'altra classe.
Il tempo di esecuzione di un altro è un altro, ad es. quando si scrive codice che utilizza un'API.
Ehm ... come intendi? Quando utilizzo un'API non accedo a quell'API tramite un debugger. Io uso i file di classe per quell'api, ma è coperto da RetentionPolicy.Class. – meriton
Ad esempio, quando si utilizzano componenti dell'interfaccia grafica dalla tavolozza dell'IDE e li si rilascia sul modulo, viene eseguito il codice. – JRL
Buona domanda, e mi sto stirando per arrivare a uno scenario convincente. Tutto quello che ho è che potevo immaginare un'applicazione che usava un classloader che non permetteva l'uso di codice deprecato. Ciò richiederebbe RetentionPolicy.RUNTIME
.
Questo è tutto quello che ho ... usi
Coppia pratici che vengono in mente:
Con Velocity si può avere un costume Uberspector che registra le chiamate reali da modelli Velocity a qualsiasi metodo deprecato e solo leggendo il log puoi vedere dove viene usato il metodo e puoi andare a modificarlo.
Con Wicket si può avere una politica di sicurezza il che non consente un'istanza di qualsiasi classe in base ai contenuti .class
quindi potrebbe essere possibile realizzare un sistema che impedisce la creazione di istanze di classi @Deprecated
se non sei un amministratore.
per entrambi i punti, sarebbe ancora possibile controllarli in fase di compilazione. Il controllo delle dipendenze dovrebbe fare il trucco, non so se capisco quello che hai detto sopra – Ravisha
Esistono alcuni framework e strumenti che consentono di creare oggetti con cui lavorare.
Ad esempio, molti editor di interfacce utente JavaBean creano istanze dei bean e interagiscono con essi man mano che l'utente manipola l'interfaccia utente che stanno progettando.
Avere l'annotazione @Deprecated disponibile in fase di esecuzione consente a strumenti come questo di segnalare metodi, eventi, proprietà deprecati per l'utente.
- 1. Perché NumberFormatException è di runtime?
- 2. Deprecated: Function eregi() è sconsigliata in
- 3. Django {{MEDIA_URL}} vuoto @DEPRECATED
- 4. dismissModalViewControllerAnimated is deprecated
- 5. Java: De-deprecated-Tools
- 6. BitmapDrawable deprecated alternative
- 7. JSDoc @param insieme a @deprecated
- 8. setTextAppearance deprecated in API di livello 23
- 9. qual è l'equivalente .NET di @Deprecated in java?
- 10. Cosa è il contrario di @deprecated in java
- 11. "Target F # Runtime" disattivato - perché?
- 12. DatatypeContexts Deprecated in Latest GHC: Why?
- 13. Perché NullPointerException è un'eccezione di runtime e RemoteException no?
- 14. perché un [n] è accettato in c durante il runtime?
- 15. Perché non è stato compilato Node.js prima del runtime?
- 16. Perché una finestra è più grande in runtime?
- 17. Soppressione " '...' is deprecated" quando si usa respondsToSelector
- 18. MKPolylineView initWithPolyLine: is deprecated in iOS 7
- 19. Perché le guide richiedono JavaScript Runtime?
- 20. Perché @FunctionalInterface ha una conservazione RUNTIME?
- 21. Perché CheckBoxFor produce errore di runtime
- 22. Perché/Wp64 è deprecato?
- 23. Perché l'annotazione @Deprecated non sta attivando un avviso del compilatore su un metodo?
- 24. Errore di runtime JavaScript: '$' non è definito
- 25. Perché isJavaLetterOrDigit è deprecato?
- 26. Perché non riesco ad installare il mio servizio (runtime più recente del runtime caricato)?
- 27. Il runtime F # 3.0 è ridistribuibile?
- 28. Hits Object Deprecated in Lucene.Net 3.03, come posso sostituirlo?
- 29. Errore di runtime JavaScript: '$' non è definito
- 30. Quali sono i vantaggi dell'utilizzo della notazione @Deprecated solo sull'interfaccia?
RetentionPolicy.Class sarebbe sufficiente anche per questo. – Jorn