Sembra che ogni progetto java a cui mi unisco o che ricomincio abbia sempre il commons-lang come dipendenza - e per una buona ragione. commons-lang ha tonnellate di classi e metodi di utilità che sono abbastanza standard con le API più standard in altre lingue. Perché Sun/Oracle/JCP non ha adottato alcune delle cose in comune con l'API standard?Perché non è commons-lang nell'API standard java?
risposta
Come già sottolineato, alcune funzionalità dell'API commons sono state introdotte in Java, spesso implementate (IMHO) meglio di quanto non fossero originariamente nella libreria Commons. Enums è l'esempio classico.
In termini di perché non adottano più di "comune-lingua", bene con alcune classi c'è l'elemento di confusione. Prendiamo ad esempio StrBuilder, è più potente di Java StringBuilder ed è estensibile. Ma non sono sicuro di voler aggiungere una classe di questo tipo all'API di base Java, StringBuilder/StringBuffer sono perfettamente validi per la maggior parte degli scopi e avere un altro in quello sarebbe davvero un po 'confuso. Non potevano davvero alterare StringBuilder in un modo che potesse accogliere tutte le modifiche sia perché potrebbe rompere il codice esistente. Anche se ne hanno aggiunto uno, e quando qualcuno è arrivato con un'altra versione più potente? StrBuilder2? In poco tempo tutto un gran casino (alcuni sostengono che l'API nucleo è già, figuriamoci con tali aggiunte.)
E come sempre con queste cose, il grande punto è quello dovrebbero essere inclusi da commons-lang. Alcune persone vorranno probabilmente vedere le classi MutableXXX aggiunte, altre le classi XXXUtils, altre il pacchetto temporale ... non esiste un consenso comune.
L'altra cosa importante è che gli sviluppatori Java devono essere molto più attenti a ciò che fa l'API Java principale rispetto agli sviluppatori Apache per commons-lang. Se un progetto di crappy in commons-lang viene sostituito in una versione futura, il vecchio può essere deprecato e successivamente rimosso (in realtà sembra essere ciò che accade.) Nell'API Java di base deve rimanere per ragioni di compatibilità all'indietro, causando solo più confusione.
Per quello che vale anche se penso che più probabilmente la funzionalità di common-lang dovrebbe essere inclusa. Posso solo vedere le ragioni, almeno in parte, perché non lo è.
Storicamente Apache Commons ha implementato alcune delle funzionalità che in seguito sono state introdotte in Java 5, come enumerazioni e annotazioni. La loro implementazione era sufficientemente diversa da rendere difficile l'integrazione.
- 1. Perché jQuery non è uno standard W3C?
- 2. Perché non è possibile riaprire un flusso chiuso (standard)?
- 3. Perché lo standard HL7 non utilizza XML?
- 4. Perché non esiste Object.setPrototypeOf (...) nello standard ECMAScript?
- 5. perché non è (123 == 0123) in java?
- 6. Perché System.arraycopy non è CamelCased?
- 7. Java Stream - Deviazione standard
- 8. Perché l'API JavaFX non è inclusa in Java 8 J2SE?
- 9. Perché FileChannel in Java non è non bloccante?
- 10. Autenticazione modulo standard Servlet Java
- 11. atoi è una funzione standard. Ma non lo è itoa. Perché?
- 12. Perché Java EE è scalabile?
- 13. La libreria standard Python è veramente standard?
- 14. È una cattiva pratica utilizzare il keystore standard Java
- 15. Perché Java enumerazioni non clonabile?
- 16. Perché java.io.Bits non è pubblico?
- 17. Perché non c'è nessun << nella libreria standard Haskell?
- 18. Perché non c'è una funzione scanl nella libreria standard Haskell?
- 19. Perché getch non è portatile?
- 20. È u_char uno standard?
- 21. Java: perché non è possibile eseguire iterazioni su un iteratore?
- 22. Perché il software Java non è compilato in modo nativo?
- 23. Perché JML non è implementato come annotazioni in Java?
- 24. Perché Java non è riuscito a trovare la classe principale?
- 25. Perché la dimensione primitiva booleana di Java non è definita?
- 26. Perché l'inizializzazione delle costanti enum Java non è completa?
- 27. Perché CPython non utilizza `sphinx.autodoc` per la libreria standard?
- 28. Qual è l'eccezione standard da lanciare in Java per operazioni non supportate/implementate?
- 29. Perché un assistente di convenienza per l'erase-remove-idiom non è fornito dallo standard?
- 30. Perché il valore standard di utilizzo non è disponibile nello storyboard?
Sono sicuro che * alcuni * di commons-lang sono arrivati a Java 7. –
Vedo che non usa generici, che dire invece di usare Guava? – maaartinus
in realtà, parte dell'intento del progetto guava doveva essere incluso in jdk 7. non so se sarà la realtà o no. – jtahlborn