Disclaimer: non sono stato in grado di trovare le descrizioni dettagliate in maniera massiccia o esempi di questo, quindi la maggior parte di questo è la speculazione.
La migliore documentazione che ho trovato per @Flow
finora è ciò che si può leggere nei commenti sull'annotazione stessa, come si può vedere here.
Estratto:
Questa annotazione aiuta il 'flusso di dati a questa' caratteristica descrivendo flusso di dati dal parametro metodo alla corrispondente contenitore (es ArrayList.add (voce)) o dal contenitore al valore restituito metodo (es Set.toArray()) o tra parametri di metodo (es System.arraycopy (array1, 0, array2, lunghezza))
In poche parole, è una forma di metadati IntelliJ deve fare qualche tipi di analisi del codice su come i dati entrano ed escono da una raccolta o simili. Non sono sicuro di quale tipo di analisi venga eseguita utilizzando questo, ma presumo che alcune delle ispezioni di IntelliJ ne facciano uso.
ho ipotizzano che un controllo simile al seguente potrebbe teoricamente essere effettuato utilizzando questi metadati (se non esiste già):
- Secondo
@Flow
, dati passati al void push(Object)
possono eventualmente essere restituiti da Object pull()
- Se il valore di ritorno da
pull
viene trasferito senza controllo per null
, dare un avviso se null
è mai passato a push
.
Prima @Flow
è stato aggiunto, questo doveva presumibilmente essere insita nel IntelliJ e sarebbe quindi funziona solo per contenitore standard classi, gli array e la roba di Java (supponendo che questo specifico tipo di analisi è stato ancora fatto prima). L'aggiunta di @Flow
lo renderebbe quindi più flessibile e consentirà anche di analizzare i contenitori personalizzati allo stesso modo.
Se qualcuno ha informazioni più precise su @Flow
e alcuni esempi reali di come viene utilizzato, anch'io sarei interessato a vederlo.