Nel sistema che sto attualmente sviluppando, devo spesso navigare in un albero degli oggetti e in base al suo stato e ai suoi valori intraprendere azioni. In Java normale questo risulta noioso per cicli, se le istruzioni ecc ... Esistono modi alternativi per ottenere la navigazione dell'albero, simile a XPath per XML? So che esistono JXPath e OGNL, ma conosci altre librerie per questo scopo? Conoscete eventuali librerie che generano bytecode per specifiche espressioni di navigazione dell'albero per rendere l'elaborazione veloce come Java fors nativi e se?Lingua di navigazione dell'albero degli oggetti in Java
risposta
Le collezioni Jakarta (http://commons.apache.org/collections/apidocs/) consentono di applicare predicati, funtori, ecc. Sui membri della raccolta. È questa la direzione che stai cercando?
Posso chiederti perché non ti piacerebbe OGNL/JXPath? Ovviamente potresti aver fatto la tua ricerca per dire di no ma mi piacerebbe sapere perché OGNL non sta risolvendo uno scopo che è stato progettato per risolvere.
Anche le raccolte di google hanno alcuni funtori (oltre alle raccolte di servizi comuni menzionate sopra) che potrebbero valere la pena guardare.
OGNL e JXPath utilizzano la riflessione per interpretare le espressioni di navigazione del grafico o dell'albero. In alcune situazioni questo è ok, ma per il mio caso d'uso ho bisogno di una libreria che generi bytecode per le espressioni ad albero per renderli veloci come il normale codice java. – paweloque
Si può prendere in considerazione Jakarta Bean Utils
String street = (String) PropertyUtils.getProperty(user, "address.street");
È possibile navigare attraverso il grafico oggetto utilizzando una notazione punto. È possibile accedere anche a proprietà indicizzate. Maggiori dettagli sui documenti.
Uno svantaggio è che Bean Utils si aspetta che il grafico che si sta navigando non contenga riferimenti null.
Il frammento di codice di seguito avrebbe gettato un NPE
Person person = new Person();
person.setAddress(null);
String street = (String) PropertyUtils.getProperty(person, "address.street");
Per superare questo limite la mia squadra ha implementato una classe che crea le istanze di tutti i riferimenti nulli di un grafico su richiesta. Questo codice è basato sulla riflessione e sui proxy dinamici (CGLIB).
Questo è vero, ma usando i beanutils non è possibile definire predicati sui nodi o eseguire funzioni sui valori. – paweloque
Capisco, non ho catturato quel requisito. In tal caso, il suggerimento di David (Raccolte comuni) può essere utile. Ha un'API dei predicati (http://www.discursive.com/books/cjcook/reference/collections-sect-filtering.html), ma potrebbe essere più dettagliato di quanto ci si aspetterebbe. Puoi anche prendere in considerazione Google Collections (http://code.google.com/p/google-collections/). Ho sentito dire che implementano anche il filtraggio per predicati –
- 1. Suggerimenti per la serializzazione degli oggetti Java
- 2. Java serializzazione degli oggetti e l'eredità
- 3. sull'uso degli operatori con gli oggetti in Java
- 4. Che cos'è il grafico degli oggetti in java?
- 5. tecniche di Java per fine vita degli oggetti
- 6. Esempi di implementazione degli oggetti di query
- 7. Ulteriori informazioni sull'overhead degli oggetti in JVM
- 8. OCaml: tipo controllo degli oggetti
- 9. Prestazioni di typecasting degli oggetti
- 10. Statistiche della lingua Java
- 11. L'impostazione degli oggetti Java su null non fa più nulla?
- 12. Contare le proprietà degli oggetti nell'elenco utilizzando java 8
- 13. Esiste una lingua con livelli di accesso basati su oggetti?
- 14. Java - copia di oggetti arraylist
- 15. display lingua Hindi in console utilizzando Java
- 16. Ordine degli oggetti CLLocation in -distanceFromLocation:
- 17. Test degli oggetti con dipendenze in PHPUnità
- 18. Informazioni sulla tabella degli oggetti in esecuzione
- 19. conteggio delle frequenze degli oggetti in pitone
- 20. Mappatura degli oggetti in Spring JDBC?
- 21. costruzione dinamica degli oggetti in javascript?
- 22. Verificare l'uguaglianza degli oggetti in CoffeeScript?
- 23. Controllo della parità degli oggetti in Jasmine
- 24. Come cambiare lingua in fase di esecuzione in java swing
- 25. Serializzazione binaria degli oggetti C#
- 26. Javascript: delle proprietà degli oggetti
- 27. ElasticSearch MapperParsingException mapping degli oggetti
- 28. Oggetto selenio Riutilizzo degli oggetti
- 29. Parse - salvataggio degli oggetti correlati
- 30. Inizializzazione proprietà degli oggetti nidificati
hai trovato una soluzione per questo? – Andez