Newsgroup: it.comp.java
Titolo: Comparare due beans?

Ho necessità di confrontare campo a campo due beans (istanze di una stessa
classe), in modo da determinare se due oggetti possono essere uguali "per
valore"; volendo generalizzare la cosa senza scrivere troppo codice pensavo
di trovare (tra Struts e compagnia) qualche utility specifica ma spulciando
un po' in giro non mi sembra di averne trovate.
Avete qualche dritta in proposito?
Grazie :)

 classe),
il metodo equals(Object obj) della classe Object è fatto apposta :)
basta che ne fai l'override

Ey de Net ha scritto:

1) override del metodo equals()
2) c'è una libreria jakarta commons-lang che ha delle funzioni di utilità
3) per eclipse ci sono plugin che generano questo ed altri metodi di 
utilità, uno di questi è commonclipse

 utilità, uno di questi è commonclipse
Questo è interessante, provo a vedere; ma in realtà avrei bisogno di
qualcosa tranquillamente gestibile a mano.
Grazie, ciao

 con 100 campi ciascuno...
La butto lě, anche se non so quanto sia performante (e gestibile) : nel 
metodo equals prova a fare ricorso alla reflection. Nel mio lavoro  č stato 
possibile anche se i campi erano parecchi perchč tutti i campi dei miei bean 
erano solo int, double o String (caso un po' patologico).
Scorpio. 

Scorpio wrote:

Perché non lasciare generare hashCode() ed equals() ad eclipse?

> Perché non lasciare generare hashCode() ed equals() ad eclipse?
Per due motivi:
il primo, debole, che a me piace il codice fai-da-te; :)
il secondo, piů importante, che se la classe cambia mi tocca ricordarmi di
cambiare coerentemente anche hashCode() ed equals().
Cmq alla fine ho risolto come da altro post.

 erano solo int, double o String (caso un po' patologico).
Ho fatto ricorso alla reflection.
Non nell'equals, chè i beans sono tutti diversi, ma in una utility separata.
Inoltre il metodo - statico - agisce ricorsivamente fermandosi solo quando
arriva ai tipi fondamentali.
Poche righe di codice per un risultato che alla fine mi fa risparmiare un
bel po' di tempo.
Anche se mi resta il dubbio che in giro ci sia già una classe che faccia
altrettanto, come minimo in Hibernate...
Cmq grazie a tutti.

> 2) c'è una libreria jakarta commons-lang che ha delle funzioni di utilità
EqualsBuilder sembrava fare al caso mio ma ha due difetti:
- costringe comunque a scrivere un metodo equals in ogni classe;
- "uses AccessibleObject.setAccessible to change the visibility of the
fields".
A me è andata bene perchè devo trattare solo bean per cui dò per scontato
che le variabili che "caratterizzano" una classe abbiano tutte i due metodi
getter e setter.

 altrettanto, come minimo in Hibernate...
appunto. hibernate si fida di equals.

 appunto. hibernate si fida di equals.
Ma di default il suo equals non confronta solo gli id? Come si potrebbe
sfruttare Hibernate?

 sfruttare Hibernate?
in che senso "sfruttare hibernate"?

Sě, ho capito, ma visto che non riesco a trovare da solo e tu le conosci non
č che sai dirmi quali sono le classi che fanno al caso mio in ambedue i
casi? Grazie :)

 casi? Grazie :)
scusami eh, ma non mi chiamo "javadoc"... :P

> scusami eh, ma non mi chiamo "javadoc"... :P
Mi hai dato tu due riferimenti che non trovo. Pazienza.

 ha scritto nel messaggio
news:a1uNi.133379$U01.1...@twister1.libero.it...


> forse trovi qualcosa su org.apache.commons.beanutils.*;
Me lo diceva anche rootkit ma non ho trovato niente di realmente utile.
O meglio, le beanutils danno un certo numero di metodi utili come contorno
ma non forniscono una classe / un metodo che faccia quello che desidero io;
per cui, di fatto, mi avrebbero risparmiato 2 o 3 righe di codice...
Almeno cosě mi sembra..