È possibile utilizzare un'ispezione per contrassegnare le istanze e visualizzare un avviso/errore. Questo potrebbe essere esclusivo per il massimo.
Per aggiungere un controllo su ordinazione, seguire https://www.jetbrains.com/idea/help/creating-custom-inspections.html, o fare questo:
- Aprire le impostazioni (CTRL + ALT + S) e la ricerca di ispezioni.
- Nella struttura, trovare "Generale" e sotto "Ispezione ricerca strutturale".
- Sotto la descrizione viene visualizzato il pannello Gravità/Opzioni. Accanto alle opzioni, premere + e aggiungere un modello di ricerca.
Per configurare l'ispezione alla tua domanda:
- Nella casella di modello di ricerca, aggiungere una variabile seguita da una chiamata di metodo, come ad esempio: $ grado $ .get()
- fare clic su Modifica variabili e selezionare $ Istanza $ dall'elenco.
- Nei "Vincoli di espressione", aggiungere il tipo di espressione "Opzionale" e applicare il vincolo all'interno della gerarchia dei tipi.
Salvare le modifiche ed eseguire l'ispezione. (CTRL + Maiusc + Alt + I, digitare "Ispezione ricerca strutturale"). Questo dovrebbe mostrare tutte le istanze di Optional.get().
Modifica: Nella domanda si chiede se è possibile ottenere un errore di compilazione. Credo che questo dipenderà strettamente da come stai costruendo il tuo codice. Se aggiungi un'ispezione e imposta il livello di errore su "Errore", dovrebbe fallire su Crea/Compila ma non su "installazione mvn".
È un po 'pesante, ma è possibile scrivere il proprio controllo e installarlo tramite un plug-in? Probabilmente un approccio più semplice ... ma il caso peggiore ... – vikingsteve
Intendi davvero che ti aspetti che tutti chiamino prima "Optional.isPresent()"? Questa non è la mia comprensione dell'intenzione di "Optional". Se è così, è solo come dover ricordare di fare un controllo nullo, quindi non hai guadagnato nulla. Ad esempio, per quanto riguarda gli usi di 'Optional.map()' - in tal caso l'ispezione lo identificherà come un problema, ma potrebbe essere perfettamente sicuro, senza aver prima chiamato 'isPresent()'. – DaveyDaveDave
Voglio dire che 'get()' deve essere chiamato dopo un controllo con 'isPresent()'. Non ho detto nulla su 'map()' o altri metodi. – Renato