-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hello everyone,
someone can explain to me why the clone () method does not return an object identical to the original?
What is wrong?
Thanks for your patience
old_current = current.clone(); if(old_current.equals(current)==false) { try { Messagebox.show("errore"); } catch (InterruptedException e) { e.printStackTrace(); } }
public class Utenti implements Cloneable { private String utente; private String passwd; private String verifica; private String tipo; private String cognome; private String nome; private Boolean abilitato; private java.sql.Timestamp data_cambio_passwd; private java.sql.Timestamp data_abilitazione; private java.sql.Timestamp data_disabilitazione; private java.sql.Timestamp data_ultimo_login; private java.sql.Timestamp data_inserimento; private String login_inserimento; private java.sql.Timestamp data_variazione; private String login_variazione; public Utenti clone() throws CloneNotSupportedException { Utenti ut = (Utenti) super.clone(); return ut; } ....
Did you implement a meaningful .equals() in your class called "Utenti"? If not, .equals() is derived from Object.class and compares simple object identity (same as objectA == objectB) which is false for an object and it's clone by design.
Cheers, Maik
Hi Maik, I have write this code in my class
.... @Override public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof Utenti)) return false; Utenti ut = (Utenti)obj; return UtilityVarie.confrontaOggetti.uguale(this.abilitato, ut.abilitato) && UtilityVarie.confrontaOggetti.uguale(this.cognome, ut.cognome) && UtilityVarie.confrontaOggetti.uguale(this.data_abilitazione, ut.data_abilitazione) && UtilityVarie.confrontaOggetti.uguale(this.data_cambio_passwd, ut.data_cambio_passwd) && UtilityVarie.confrontaOggetti.uguale(this.data_disabilitazione, ut.data_disabilitazione) && UtilityVarie.confrontaOggetti.uguale(this.data_inserimento, ut.data_inserimento) && UtilityVarie.confrontaOggetti.uguale(this.data_ultimo_login, ut.data_ultimo_login) && UtilityVarie.confrontaOggetti.uguale(this.data_variazione, ut.data_variazione) && UtilityVarie.confrontaOggetti.uguale(this.login_inserimento, ut.login_inserimento) && UtilityVarie.confrontaOggetti.uguale(this.login_variazione, ut.login_variazione) && UtilityVarie.confrontaOggetti.uguale(this.nome, ut.nome) && UtilityVarie.confrontaOggetti.uguale(this.passwd, ut.passwd) && UtilityVarie.confrontaOggetti.uguale(this.tipo, ut.tipo) && UtilityVarie.confrontaOggetti.uguale(this.utente, ut.utente) && UtilityVarie.confrontaOggetti.uguale(this.verifica, ut.verifica); }
and this....
public static class confrontaOggetti { public static boolean uguale(String a, String b) { return a==b; } public static boolean uguale(Boolean a, Boolean b) { return a=b; } public static boolean uguale(java.sql.Timestamp a, java.sql.Timestamp b) { return a == null ? b == null : a.equals(b); } public static boolean uguale(Object a, Object b) { return a == null ? b == null : a.equals(b); } }
Some fields (only those defined Timestamp) changed during this operation:
private List<Utenti> thelist; private Utenti current, old_current; public void refreshUi() { UtentiDAO pdao = (UtentiDAO)SpringUtil.getBean("UtentiDAO"); Tabbox tbox = (Tabbox)getFellow("tbox"); tbox.setSelectedIndex(0); thelist = pdao.findAll(); if (thelist.isEmpty() == false ) setCurrent(thelist.iterator().next()); <<<------------ !!!!!! Here the problem....... binder.loadAll(); } public void setCurrent(Utenti cur) { this.current= cur; }
The problem is that some fields (Timestamp) are included in the List with the milliseconds and are not in the database.
Example:
Field before RefreshUI: 08/12/2010 08:47:03.0
Same field after: 08/12/2010 08:47:03.557
It 's a problem of casting? It 's a problem JdbcTemplate? It 's a problem with my program?
Thanks
Asked: 2010-12-08 11:42:57 +0800
Seen: 130 times
Last updated: Dec 09 '10