JavaRush /Java Blog /Random-IT /10 funzionalità di Java 8 di cui non hai sentito parlare
Vash_the_Stampede
Livello 11

10 funzionalità di Java 8 di cui non hai sentito parlare

Pubblicato nel gruppo Random-IT
Lambda, lambda, lambda. Questo è tutto ciò che senti quando la gente parla di Java 8. Ma questa è solo una parte. Java 8 ha molte nuove funzionalità: alcune nuove classi e idiomi potenti e altre semplicemente cose che avrebbero dovuto essere presenti fin dall'inizio. Volevo passare a dieci nuove funzionalità che considero dei piccoli gioielli che vale sicuramente la pena conoscere. Ce ne saranno sicuramente almeno uno o due che vorresti provare, quindi iniziamo! 1) Metodi predefiniti. Novità nel linguaggio Java, ora puoi aggiungere corpi di metodi alle interfacce ( metodi predefiniti ). Questi metodi vengono aggiunti incondizionatamente a tutte le classi che implementano queste interfacce. Ciò ti dà l'opportunità di aggiungere nuove funzionalità alle librerie esistenti senza infrangere il vecchio codice. Questo è sicuramente un vantaggio. D'altro canto, rende molto confuso il confine tra l'interfaccia, che obbliga a seguire determinate condizioni come convenzione, e la classe che le segue, come sua implementazione privata. Nelle (giuste) mani giuste, questo può essere un modo elegante per rendere le interfacce più intelligenti, evitare ripetizioni ed estendere le librerie. In cattive mani; presto vedremo metodi nelle interfacce che chiamano questo e lo trasformano in un tipo concreto. Brrr.... 2) Arresto dei processi. Avviare un processo aggiuntivo è una delle cose che fai sapendo a metà che tornerai (debug) per eseguirne il debug quando il processo (si rompe) (si blocca) si interrompe, (si blocca) si blocca o utilizza il 100% della CPU. La classe Process è stata ora dotata di due nuovi metodi per aiutarti a controllare i processi indisciplinati. Il primo, isAlive() , consente di verificare facilmente se un processo è in esecuzione senza doverlo attendere. Il secondo e più potente (attenzione!) è destroyForcibly() , che consente di interrompere (senza vergogna) forzatamente (uccidere) un processo che ha superato il suo tempo (in attesa o meno) o che non è più necessario. 3) Blocco timbrato. Ora qualcosa di veramente emozionante. A nessuno piace sincronizzare il codice. Questo è un modo infallibile per rallentare le prestazioni dell'applicazione (soprattutto su larga scala) o, peggio, causarne il blocco. Eppure, a volte non hai scelta. Esistono molti modi di dire per sincronizzare l'accesso multi-thread a una risorsa. Uno dei più preferiti è ReadWriteLock e le relative implementazioni. Questo linguaggio riduce la contesa consentendo a più thread di utilizzare una risorsa bloccando solo i thread che la manipolano. Sembra fantastico, ma in pratica questo blocco è molto lento , soprattutto con un gran numero di thread di scrittura. Ciò si è rivelato così grave che Java 8 introduce un nuovo RWLock chiamato StampedLock . Questo lock non solo è più veloce, ma offre anche una potente API per il lock ottimistico, dove è possibile ottenere un lock in lettura a basso costo, sperando che non avvenga alcuna operazione scritta durante le sezioni critiche del codice. Alla fine della sezione, chiedi al blocco se la registrazione è avvenuta durante quel periodo, nel qual caso puoi decidere se riprovare, intensificare il blocco o rinunciare. Questo lucchetto è uno strumento potente e merita un post tutto su se stesso. Sono incredibilmente entusiasta di questo nuovo giocattolo. Grande! Inoltre puoi leggere Qui . 4) Registratori concorrenti. Questo è un altro piccolo gioiello per chiunque utilizzi applicazioni multi-thread. Una nuova API semplice ed efficiente per leggere e scrivere contatori da più thread. A volte è ancora più veloce rispetto all'utilizzo di AtomicIntegers. Abbastanza bello! 5) Valori facoltativi (o facoltativi). Oh, puntatori nulli, un mal di testa per tutti gli sviluppatori Java. Forse la più popolare di tutte le eccezioni, esiste fin dai tempi più remoti. Almeno dal 1965 . Prendendo in prestito da Scala e Haskell, Java 8 ha un nuovo modello, chiamato Opzionale, per racchiudere i riferimenti che possono essere nulli. Questa non è affatto una soluzione miracolosa che eliminerà il valore null, ma piuttosto un mezzo con cui i progettisti API indicano a livello di codice (invece che di documentazione) che un valore null può essere restituito o passato al metodo e il chiamante deve prepararsi per questo. Quindi funzionerà solo per le nuove API, a condizione che i chiamanti non consentano al riferimento di fuoriuscire dal wrapper, dove potrebbe essere dereferenziato in modo non sicuro. Devo dire che sono piuttosto ambivalente riguardo a questa funzionalità. Da un lato, i valori nulli rimangono un problema enorme, quindi apprezzo tutto ciò che è stato fatto per risolverlo. D'altra parte, sono piuttosto scettico sul fatto che ciò avrà successo. Questo perché l'utilizzo degli optional richiede uno sforzo prolungato da parte dell'intera azienda e ha un impatto immediato minimo. Senza un’applicazione rigorosa, è probabile che rimarrà sul lato sinistro della strada. Ulteriori informazioni su Opzionale . 6) Annota tutto. Un altro piccolo progresso nel linguaggio Java: le annotazioni possono essere aggiunte a quasi tutto nel codice. In precedenza, le annotazioni potevano essere aggiunte solo a cose come classi o dichiarazioni di metodi. A partire da Java 8, è possibile aggiungere annotazioni alle dichiarazioni di variabili e parametri, quando si assegna un valore a un tipo specifico o addirittura si alloca un nuovo oggetto. Questo fa parte di uno sforzo concentrato (insieme ai miglioramenti agli strumenti e alle API JavaDoc) per rendere il linguaggio più amichevole per gli strumenti di analisi e misurazione statici (come FindBugs). Questa è una caratteristica interessante, ma proprio come invokeDynamic introdotto in Java 7, il suo valore reale dipenderà da ciò che la società ne farà. 7) Operazioni di overflow. Ora, ecco una serie di metodi, che avrebbe dovuto far parte della libreria principale sin dal primo giorno. Il mio hobby preferito è il debug degli overflow numerici quando gli int superano 2 ^ 32 e procedere alla creazione degli errori più sgradevoli e inaspettati (ad esempio "come diavolo faccio a ottenere questo strano valore?"). Ancora una volta, non ci sono soluzioni miracolose qui, ma ci sono molte funzioni per manipolare i numeri che vengono eliminati quando traboccano in un modo meno indulgente rispetto all'operatore +/* standard, che trabocca incondizionatamente. 8) Sfoglia il catalogo. L'iterazione del contenuto di un albero di directory è stata per lungo tempo una di quelle cose che le persone cercano su Google (nel qual caso probabilmente ti verrà consigliato di utilizzare Apache.FileUtils). Java 8 rinnova la classe Files con dieci nuovi metodi. Il mio preferito è walk() , che crea un thread lento (importante per file system di grandi dimensioni) per scorrere il contenuto di una struttura di directory. 9) Forte generazione casuale. Al giorno d'oggi non mancano i discorsi sulla vulnerabilità delle password e delle chiavi. La sicurezza del software è un’attività complessa e soggetta a errori. Ecco perché mi piace il nuovo metodo SecureRandom. getinstanceStrong() , che seleziona automaticamente il generatore casuale più potente disponibile per Java Virtual Machine. Ciò riduce le possibilità di fallire o di avere un generatore debole, il che renderà le chiavi e i valori crittografati più suscettibili agli hacker. 10. Date.toInstant(). Java 8 introduce un'API completamente nuova per date e orari . Ciò è abbastanza comprensibile poiché quello esistente non è molto buono. Fondamentalmente Joda si sta orientando da diversi anni verso un'API Java per date e orari. Tuttavia, anche con la nuova API, rimane un grosso problema: ci sono moltissimi codici e librerie che utilizzano la vecchia API. E sappiamo tutti che sono qui per restare. Allora cosa farai? Per raggiungere questo obiettivo, Java 8 ha fatto qualcosa di piuttosto elegante aggiungendo un nuovo metodo alla classe Date chiamato toInstant() che lo converte in una nuova API. Ciò ti consente di passare rapidamente alla nuova API, anche quando lavori con codice che utilizza la vecchia API (e continuerà a farlo nel prossimo futuro).
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION